Screen to tile coordinate transform when tiles have different visible height gets complicated.

Refactored tile types into their own classes, so they may become composit with e.g. trees and other clutter on them in the future.