experimental data family for keys

@snoyberg take a look at this if you get a chance. The main change is in PersistEntity.hs

``` haskell
data KeyBackend backend record
persistValueToPersistKey :: PersistValue -> KeyBackend backend record
persistKeyToPersistValue :: KeyBackend backend record -> PersistValue
```

Now I need to change TH.hs to generate something like:

``` haskell
instance PersistEntity User where
      data KeyBackend (EntityBackend User) User = UserKey Int64
```

I think there should be a way to make this maintain the backend flexibility we want.