Better board setup.

This pull request creates significant changes to the `board` and `board_geometries` modules.

There are two of new required methods for a `BoardGeometry` subclass. The methods `hexagon_neighbors` and `vertex_synonyms` allow for all of the board setup to be done with only calls to the underlying board geometry.

The design of the underlying board graph has been simplified to only require tiles as nodes, and to represent road/connections as edges in the graph. Finally, vertices will not be represented as nodes, but tracked separately in a private dictionary.