Subclass Tile instead of using it directly

This is to make it easier to have different tile types, e.g. straight,
corner, split.
Emit flow_blocked if Cell doesn't have a neighbour
Add Tile::Corner