Add combinator that allows validation of data being encoded or decoded

Variant of xmap, where f and g use \/ to report error if argument is unacceptable. 

Makes it easy to create new encoders that include validation of the data. 
Style nitpick - pattern match on function arg to flatMap here. `flatMap { case (rem, b) => ... }`