Added a Coord named tuple to make tile positioning easier to use.
Added some current/target tile position and angle variables to the player, ready for implementing animation
Sprite Rotation

* Move the Player class to use the pygame sprite base class for
more consistent updating wrt blit/flipping.
* player rotates naively when changing direction, speed in the
player config file.
* Need too put in game states to prevent movement while rotating
and control updating vs. displaying.
GameSceen updating

* changed update of screen to be controlled within the gamescreen
class more completely. Now just called with an update() function.
Huge update:

Changed a whole bunch of stuff to do with the movement
of the player. Now has a basic animation while moving,
though the maths of this will need tweaking.
Added gamestates for pausing, moving, rotation etc. These
still need fiddling with to prevent movement events from stacking
while moving.
Added a utils.py file to do tuple maths including some coordinate
transformations.
There was a huge bug for a while with moving downwards, but it's fixed
now ('is not' conditional was wrongly used). Now there's still a bug with
the tile placement on the map/tile index. The player sees tiles in the wrong
places.
Fixed the unwalkable bug.

just got x/y mixed up when testing for unwalkable tiles
Rotation and Movement fixes + small map update

Added water around the outer edge of the level so we can't get to
the out of index areas. Required a quick change to the start position.

Made a velocity variable for the player so the moving speed can be
constant. Need to make a speed config variable (~0.1)

Now check for closeness of current angle to target angle and
just set the to equal to oine another if close. Preventing any
appearence of 'wiggling' towards the target angle. Now need
to correctly rotate the player and we can then merge back to
the master branch.
Level Image

**This commit doesn't work**
Have started the move to making the background layer of
the level into one large image. Hopefully scrolling + blitting
this will be faster than doing so for the individual tiles
every frame. The image processing is currently done, so the
Map() class makes the correct image but the game hasn't
been changed to take advantage of it yet.
Level Working

Have changed the Map and GameScreen classes to use the new
large image for blitting. Seems faster but still quite a bit of
slowdown when using larger levels. Investigate scrolling rather
than changing the position fully. This has also gotten rid
of the black lines due to pixel rounding errors, so we'll
keep it.
Have also added an fps measurement to the screen and have
made the game use only one instance of Clock() as I think
pygame didn't like that I was using several for different
gamestates.
Global Times and rotation

* Have made the pygame clock global, as well as
some movement and input time variables. This should
nicely separate the FPS from the gamespeed forever.
The unecessary calls have also been reduced and overall
the animation is much smoother, even with the larger map.

* This necessitated a small addition to the config/main.py

* Made a useless change to the rotation of the player
whilst trying to figure out a good way of defining the correct
rotation direction.
Bigger test level

* Have added a level002 file which ahs a decently sized map with slightly
more complicated water. This was to check there aren't oddities
with the maps and to see how smooth the moving is with a larger
map.
* Things to do:
 1) Better map/level loading. (do this much later - probably in another branch)
 2) Get the fucking player rotation working.
Rotation Fix!

* Used ugly coding to make the player rotate the correct
direction. Also made the rotation speed a little more configurable
* Now we use a rel_angle variable to set the number of degrees and
direction that we want this rotation to be. Then just step
through by that amount * the rotation speed. A happy byproduct
is that rotating 180 degrees takes the same amount of time as 90.