Fixes in ToList (fixes https://github.com/milessabin/shapeless/issues/32)

Calling .toList on an HList made of higher kinded types often returns a List[Any] if the toList method is not suggested the right type (especially for contravariant HK or in the absence of variance annotation). See https://github.com/milessabin/shapeless/issues/32.

This PR is a slight modification of the implicits of ToList. They make calling .toList on an HList returning a list with the same type that the compiler would have inferred if given the same items in a (standard) list, when higher kinded types are involved. In particular, it fixes https://github.com/milessabin/shapeless/issues/32.

Without this fix, we usually get a List[Any] when one would have expected a List[M[...]]. See the added tests.

There are still some cases that do not work well, when dealing with HLists made of existentials in particular. These are also in the tests, but commented out. (Actually, I think the problem comes from the commented-out tests, that don't handle existentials correctly, the lists given by to .toList are now correct.)

Don't hesitate to ask me if you have any question.

Regards,
Alexandre