Added TileMapDefinition class and refactored related files

 - TileMapDefinition solves the issue of all the tile classes not having the correct tile width and
   height the user intends. In some cases (for retrieving the tile from the sheet) we absolutely
   need the tile size specified in the tmx map file but in almost all other cases we need to use the
   programmers size.
 - The programmer can now explicitly set the tile size. All logic based on tiles position and size
   as well as rendering size will be done based on the tile size set, not the tile set on the tile
   sheet image.