Reworked Square / File / Rank data types.

!!! This is a work in progress so I am committing it to a separate
branch for now. The perft shows failures with this commit.

The Square / File / Rank data types are newtype wrapped Ints. Now we can
enforce correct use of these by the type system. This is also working
towards having Arbitrary instances from quickCheck (they are already
Enums with their limited range).
Fix direction of Pawn capture

This was a *very* difficult bug to track down. Pawn captures were
calculated from the wrong pawn position.
Fixed hDiff / vDiff mistakenly swapped

This caused the enPassant captures to be miscalculated / among other
badness.
Fix long castles.

The Rook took it's own king on the c file.
Added debug facilities to perft

The Board module can print FEN. The perft test accepts command line
arguments to either calculate the perft at a given depth for a position
or to generate siblings of the given position. The supplied shell script
uses crafty to recursively track down perft issues.
Fixes #5. QuickCheck / Arbitrary instances

Added arbitrary to BitBoards, Boards, Squares. added different
properties of the move generator, magic and Zobrist. Added unit test
binaries that test these properties.