Backport ActiveSupport::MessageEncryptor/Verifier from Rails 4.0.4

This backports the versions of these classes from upstream rails at 051d289030a6cb86590cd1b619eae1879b48458a

The most notable differences are the ability to use non-Marshal serializers and also specify a signature key which is distinct from the encryption key. Otherwise these are backwards compatible with their Rails 2.x counterparts.

Using a non-Marshal serializer (e.g. the provided NullSerializer, or JSONSerializer) will make interop with non-Rails things easier.