Split Trap into DecoderTrap and EncoderTrap.

This prevents through the type system using an encoder-only trap for decoding, rather than having runtime failures.

It’s only when starting to make this change that I noticed that the variants in common in both had to be disambiguated. I added prefixes, but it makes the API a bit ugly to use so I’m not sure it’s worth it. What do you think?