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. 
Switch syntax to infix notation to be consistent with other places? `f: A => String \/ B`