Integrate ActiveJob / DeliverLater / GlobalID with Rails

WIP.
@cristianbica that sounds great.  Now I wonder, if there's only one method that can raise this exception, what's the point of using `rescue_from`?  I don't mind if we leave it in so people can use it, but I'd like to add this patch:

```diff
diff --git a/activejob/lib/active_job/execution.rb b/activejob/lib/active_job/execution.rb
index 78ada3d..fd78a5b 100644
--- a/activejob/lib/active_job/execution.rb
+++ b/activejob/lib/active_job/execution.rb
@@ -11,7 +11,7 @@ module ActiveJob
 
     def execute(job_id, *serialized_args)
       self.job_id    = job_id
-      self.arguments = Arguments.deserialize(serialized_args)
+      self.arguments = deserialize_arguments serialized_args
 
       run_callbacks :perform do
         perform *arguments
@@ -23,5 +23,11 @@ module ActiveJob
     def perform(*)
       raise NotImplementedError
     end
+
+    private
+
+    def deserialize_arguments(serialized_args)
+      Arguments.deserialize(serialized_args)
+    end
   end
 end
```

so that in our job we can deal with fixing the arguments independently from errors in `perform`:

```ruby
require 'active_job'

class RescueJob < ActiveJob::Base
  def perform(person)
    # oops, I meant friend_id, but I used parent_id, so this may
    # generate a record not found error, but it will raise an exception
    # and the job stops
    Friend.find person.parent_id
  end

  private

  def deserialize_arguments(args)
    super
  rescue ActionJob::DeserializationError
    fix_the_args(args)
  end
end
```