Optimize drawing a little bit by caching TCODColor.black

We use the color black quite a lot, once per onscreen tile, so we can
get a bit of a speed boost by not crossing the P/Invoke border so
many times per drawn frame and instead only cross over for non-black
colors.

It may be worth creating a CLR-side map of cached colors from TCOD,
but this may not be worth the effort just now.
Reorganise classes around the player and gameobjects.

Introduces Mobile, the base for Player and any NPC's/Monsters.
Also pass a list of the current objects to the MoveTo() so we
can do collision checks.
Add a property for getting the center of the camera's view.
Add property for the camera's current view frustum.
Clean up player movement collision checks.

When passing the list of possible collisions, only pass those mobiles
that are potentionally in view.
Add camera-only movement.

Holding shift engages player independent camera movement.
Add documentation to GameMap
Add documentation to Mobile, change API

Use the interface of IMobile rather than the concrete class.
Update entity drawing to use the visibility culled list.

Only bother considering drawing things that are on the screen.
Tidy up Engine.cs

Possibly some small fixes that maybe should have made it in earlier.
Oops.