Small memory savings

Two small changes which save some memory:

* Indexes into tile arrays are now stored as bytes instead of ints, since the only need to represent very small numbers. The CustomTerrain field in the Map class means this gains us about 5MiB back for medium sized maps.
* We don't store pre-calculated textures coordinate pairs in Sprite, preferring to store pre-calculated values for each corner and return pairs on demand. This allows us to store texture co-ords for sprites using only 4 floats instead of 8. We also remove the array as well. This saved about 5MiB in my tests.
To be honest I didn't imagine creating float2s could possibly be overhead since they're so simple, but I guess they could be.

However after poking around it seems that the texture coords were all passed to Vertex constructors anyway which just unwraps them back into individual floats - so we can skip the float2 part altogether and just take individual float parameters in the first place.