Shapeless 2.0.0-M1 compatibility

This is a straightforward port to Shapeless 2.  It has #5 as a basis.

* The deriving macro copied all over the place; this was easy, but perhaps undesirable.
* Typeclass derivation is left product-only, as it was previously.

If you wish, this could be maintained in a branch other than master, while Shapeless 2 is not yet final.