Refactoring tiles to inherit from Tile

Fairly large refactor, but we are going to start duplicating functionality inside the tiles otherwise. This is also setting me up to persist user added tiles.