Add shipment transfer API action

Adds a new route to transfer one or more inventory units from an
existing shipment to either another shipment or a new shipment. This
route is equivalent to removing the existing inventory unit, creating
the new shipment (if applicable), and adding the inventory unit to the
new shipment.

The main benefit is that a javascript error (or user navigation) will no
longer result in a unit being removed but never re-added. It should also
simplify javascript code in the admin.

This commit doesn't significantly speed up transfers (there is a
significant slowdown if the variant has other backordered units), but it
should allow future improvements.