Use TH to generate Tuple instances.

In addition:
    - use `Map` newtype for Cql instance
    - use custom `Inet` type for IP addresses
    - remove snappy and lz4 dependencies

The removal of snappy and lz4 is mostly due to GHC Ticket #3333 which
prevents template haskell for working properly and I did not want to
separate the tuples into a separate library.