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.:

    Crypto::PrivateKey.new(key, :base58)

Or:

    signature_key.sign(message, :hex)

Crypto::Encoder provides the backend for this system.
Base64 encoding support

This serializes Base64 without wrapping, which is probably what users
will expect.
Base32 encoding support

This is an encoding adapter for Base32. It requires the base32 gem and
thus isn't loaded by default.

The Base32 produced is "Zooko-style", i.e. downcased (which is allowed
by the spec) to be visually less jarring and screamy.
Strip base64 carriage returns

This is necessary for Ruby 1.8 compatibility
Crypto::Encoder.[]=

This allows users to register their own encoder objects without forcing
them to subclass Crypto::Encoder.

Could probably use a separate spec. It's now covered indirectly via
register's codepath.
Raise ArgumentError when asked for nonexistent encoders
Add Crypto::Encoder support for signatures

This wires Crypto::Encoder into Crypto::SigningKey and
Crypto::VerifyKey. They can now deserialize and serialize keys as any
format supported by Crypto::Encoder, and can also serialize and
deserialize signatures in any format.

This should also hopefully make a nice reference for using
Crypto::Encoder elsewhere.

At some point we should probably make all the keys inherit from a base
class, as there's already duplication in methods like #to_bytes and
also #to_s
Ensure all encoders transform to strings

Have encoders do automatic string coersion so we can make some
assumptions about the types of objects that have passed through the
encoding system.
Replace Crypto::Util.hex* with Crypto::Encoder

This replaces the usage of the hexadecimal functions located in
Crypto::Util with Crypto::Encoder, which also opens the door to using
other encodings that aren't hex.

In addition, it looks like there were a few potential bugs in each of
the authenticators (verify method using the "authenticator" variable
instead of the "auth" variable after doing input validation on "auth")
that this change should address.
Merge pull request #15 from cryptosphere/encoders

Pluggable encoders