Unique keys

Major Changes
--------------------
'Hash keys' have been added for dimension and fact tables.

These are unique keys, which concatenate all of the user defined columns and creates a SHA-1 hash. This will prevent duplicate rows from being inserted.

The reason for using this rather than a composite unique key is MySQL has a size constraint for unique keys, which can easily be exceeded. The hash key also provides a data integrity check should it ever be required.

Minor changes:
--------------------
 * Batch insertion has been added to dimensions.
 * A bytearray type has been added, which is used to map to the VARBINARY SQL type.

Follow up work
--------------------
Adding some extra tests for dimension retrieval.