Add BoardType interface.

This interface will allow for setup of different board layouts. It
takes care of converting between ordinal and hexagonal coordinate
systems.

We start with a StandardBoardType concrete implementation of the
BoardType interface.
Fixed concrete method names.
Add hexagon_from_ring_spine_offset method and tests.

Converts from a ring, spine and offset into hexagon coords.

- ring is the number of tiles to the center along the shortest path.
- spine is the nearest counter-clockwise "spoke" from the center.
- offset is the number of tiles clockwise from the spine.

This method is a helper method to make the implementation of
hexagon_from_ordinal clearer.

This commit also includes tests for this method.
Add docstring to hexagon_from_ring_spine_offset.
Add ring_spine_offset_from_ordinal method + tests.

This method acts as a link between the hexagon_from_ring_spine_offset
and the ordinal number to be passed in to hexagon_from_ordinal.

This function makes use of a number of helper functions, all of which
are also included in this commit with tests.
Add hexagon_from_ordinal and tests.

This function converts an ordinal number to a hexagon coordinates
triple. This is the function that allows converting a list of tiles
into tiles with hexagonal positions.

There is also a set of integration tests that make sure that it is
hooked up correctly.
Add ordinal_from_hexagon and tests.

This method ensures that the reverse of hexagon_from_ordinal is
consistent by using that method, iterating through the ordinal
numbers, and returning only when a match is found.
A cache for conversions between hexagon and ordinal.