Pluggable encoders

This is the initial spike of a pluggable encoder system, currently with
just hex support (stolen from `Crypto::Util`)

This should make it easy to extensibly add additional encoders or allow
users to supply their own.

The goal is to allow the user to supply an encoding at the time they're
passing a string into an API, e.g.:

```ruby
Crypto::PrivateKey.new(key, :base58)
```

Or:

```ruby
signature_key.sign(message, :hex)
```

`Crypto::Encoder` provides the backend for this system.