Name hinting

Implements a simple variant of "name hinting", i.e. type classes now have access to the names of the case classes and their respective fields. "simple" because the names are not reified in the representation type, but rather just passed into the appropriate `product` and `coproduct` functions. Type classes which are not interested in this functionality don't have to implement these new functions; there are reasonable default implementations which ignore the names.

Also reworked the test for instance derivation. It uses a dummy type class which tracks the invocation of `product` and `coproduct`. It checks the mechanism more thoroughly, but still doesn't check instances for recursive types. Luckily, that is covered in the examples.