Playing with types

- Generalized Kernel instance defns for MH and SA from Double to 'a'
- Changed representations for MH and SA datatypes
  - Now the target and proposal type info is parameterized in both
    MH and SA type
  - This allows us to get by with writing the class constraints only
    at the Kernel instance defn level
  - This is experimental, current guess is that this extra type info
    might come in handy when trying to infer the invariant distribution
    of a kernel