Change code to invoke mailers with ids

It's generally preferable to invoke mailers using ids. Using ids as opposed to full-blown model objects makes it easier to swap in asynchronous mailers, as only the ids need to be persisted in the back end store supporting the asynchronous mailers.

This PR includes the following changes:

1. Spree::OrderMailer and Spree::ShipmentMailer can be invoked using either models or their ids.
2. Methods that call methods on Spree::OrderMailer or Spree::ShipmentMailer now pass model ids as opposed to model objects
3. Changes to the specs to validate this behavior.

This is the master branch version of pull request #2806