Abstract encoding strategy for ActiveSupport::MessageVerifier

This allows `ActiveSupport::MessageVerifier` subclasses to define their own encoding strategy.  Good for handling special cases like reply-to addresses that need to be lowercase (see https://github.com/rails/rails/issues/17602).

Might make more sense to add `dump` and `load` methods too, so subclasses have full control over serialization without having to worry about `@serializer`.