Instead of doing the BFS route, I focused on the "flood fill" and implemented a union-find solution.
Union-find is an algorithm that is used on Disjointed sets, which is perfect for flood fill scenarios.
Each "lake piece" is a node, and everytime a lake piece is found you connect the root of the found node to the roots of the nodes above, and/or to the left of it.
Connecting to roots will increase the size of root1. Root2's root then becomes root1.
Doing this allowed me to read in and connect all the nodes in one swoop. There are some speed improvements that can be made here but even in an inefficient state, union-find is still quite fast.