Finally making Codec.coproduct() work

This required some refactoring to have a cleaner code working around
a Shapeless limitation which disallowed to have codecs in a package
and frames in another. I finally chose to mix codecs and dicriminators
with frames companion objects.