Feature visibility

Implements visibility and visibility spreading in the GridModel. Visibility changes are reflected in GridView as well, with code in place to prevent rotating invisible pipes. Currently displays invisible pipes as infected NESW pipes, as no image has been created. Includes tests for visibility at a GridModel level.
We should add an assert to `testVisibilitySpread` that ensures a pipe returns to not being visible after it is made visible. From my manual testing, it appears pipes become visible correctly but never become invisible again.