Add an Encoding system instead of adhoc uses of binascii

* Adds an Encoding system that supports raw, hex, base16, base32,
  and base 64.
* Adds an encoding=ENCODING parameter to methods to control what
  encoding data is returned/passed in.
* encoding parmater supports passing in a custom encoder object
* Encoding system supports registering of new encoders through
  nacl.encoder.register.