Wang Tiles Draft

This is an initial draft of a corner-wang tiles for the 2d plane.
Why would we care about this?
1. Tiles.
2. Level generation.

The solver is very rough. The code quality is subpar and it isn't guaranteed
to produce a solution. In general I suspect that tiling the plane is NP-hard.
For our purposes, the right approach is to take an input tile set (that may
be hard), run the solver until it gets stuck, confabulate a tile that unsticks
the solver and restart. Once we've made a tiling easy, emit the augmented
tile set. Easier said than done, perhaps.

The other trick is to find a recursive subdivision of each tile. If we can do
that, tiling forever becomes trivial.
Rename Domino to CornerDomino
Rename Colour to CornerColour
Add EdgeDominoes

(This is, ahem, untested)
Make CornerDomino and EdgeDomino subclass domino

This will leak memory because I haven't gotten around to writing
destructors.
Break the Tile Generator

This should be a faithful implementation of the rowwise plane tiling algorithm
described in the Cohen paper. Unfortunately, it doesn't do the right thing. It
actually performs worse than the 'tile the plane randomly and then flip stuff
if you get stuck' algorithm. But, hey, let's check it in so someone can point
out how I'm being a dunce. The smug satisfaction of proving me wrong should be
enough to motivate someone to help me debug this.
Fix an obvious cast bug (edlothiol)
Domino Bugfixes

Fix a couple of garbage bugs that were horribly breaking the domino code.
Either the cohen set or the periodic set can trivially tile the plane.
Steer clear of the aperiodic set, finding a tiling is hard.
Add citation to domino headers.
Template'ize Dominoes

This makes a bit of an awful mess of the code, but gets rid of casting
and buys use typesafety. I thought about mixing subclassing and templates
but then my brain broke a little bit.

On the plus side, you can define new dominoes with struct syntax.
Merge Dominos

C++11 is in, so this can get merged.