improving the EncodeFrom/EncodeTo API

This commit lets a developer pass 'undef' to both EncodeFrom
and EncodeTo parameters, meaning "don't do it", which effectively
overrides the default encoding for both legs, "utf-8".

Note that, as per Encode's documentation, the croak check was
only added to the decode() step. This is to preserve behavior
compatibility to the from_to() function which was formerly used
and does exactly that.