Added CompoundKey with 3 generic types

Now you can define ICompoundKeyRepository<T, TKey, TKey2> and
ICompoundKeyRepository<T, TKey, TKey2, TKey3> which are more specific
and declarative in showing what the keys are.

Or you can use ICompoundKeyRepository<T> when there are more than 3 keys
in your compound key and do something like repository.Get(1, 2, "jeff",
14) for a 4 key compound key.

There are currently only implementations for Ef5 and InMemory.

Again a lot of code cuplication will need to be consolidated by
refactoring.