Implemented abstract bases for tiles and mazes

Refactored so we have a more abstract interface, adapted tests to
maximise reusability
Removed maze class in favor of abstract interfaces