continued rewriting to clear out sites.
first cleanup batch done. Code compiles. No difference between blocked
and vacant sites in solver. Is this necessary? Should only explicitly
check for boundaries where needed?
some fixes. Need a smart way of handling boundaries and blocked and vacant sites or else this is going to end up messy as hell.