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. The implementation is also, in general, less wonky (see the old constant time comparison code vs the new code)

Using a non-Marshal serializer (e.g. the provided NullSerializer, or JSONSerializer) will make interop with non-Rails things easier.