RF: Throwing away the old strings in a list approach for the layout.

We now store the positions for each maze item separately (and in case of
‘Free’, we do not store it at all). This gives us small speed
improvements when the maze is changed (e.g. ‘Food’ is eaten) or when
retrieving all positions of enemy ‘Food’. On the other hand, iterating
over the whole ‘Maze’ or trying to access all ‘Free’ positions (which
also requires complete iteration) is likely to be slower. This may be
optimised in future commits. In the long run, ‘Maze’ could be a mere
wrapper object around data stored inside a specific universe, which
would then also take care of specific serialisation needs (such as not
resending the walls during the ‘get_move’ phase).
RF: Using dict lookup instead of separate instances.
RF/FO: New PEP8 line lengths.
NF: FoodEatingPlayer
UT: Add a new test to the shortest path algorithms.
ENH: Adding a __str__ to AbstractPlayer.
ENH: Check line lengths.