Board manipulations

This pull request finishes off the basic board interface. New methods on `board.Board`:

- `tiles`
- `port`
- `add_town`
- `upgrade_town`
- `add_road`
- `has_town`
- `has_city`
- `has_road`

Tests included. From here we'll do some basic refactoring, and then move on to creating a game loop and doing a player interface.