Move LineItem callback to a service object

There will be scenarios where we want to save the line item but we don't
want to trigger all adjustments and order update calls. e.g. when saving
multiple line items at once in /cart or when saving a line item once
order is completed
Introduce CreateItemAdjustment promo class

Bring back CreateAdjustment as it used to be focused on order
adjustments. Hopefully will make backward compatibility easier
LineItem promo action `perform` receives a line_item

Instead of getting an order and looping through order.line_items. It
makes this class pretty much with the same behaviour as CreateAdjustment
except that they both need to work with different totals attributes.

Both CreateAdjustment and CreateItemAdjustment `perform` receives and
object and creates the adjustment with the given object as the
adjustable.

I think this duplication might be ok for now just so that we don't
overengineer it too early. I guess it's also simpler. They may differ
at some point and if they don't we can unify them later on
Persist order totals after run_hooks

Give room to easily include additional logic before persisting those
totals
Introduce PromotionItemHandler to activate promos
PromotionItemHandler activate order level promos

Move `promotion_credit_exists?` method to the PromotionAction classes.
Hopefull that can make it easier to unify that method when necessary
No need to reassign line_item

The same object is passed around
Make PromotionItemHandler have pluggable behaviour
Finalize shipments adjustments on `ship!`
Fix order_summary and order_details partials

They both were using the method `price_adjustment_total` which was
removed. Instead those partials use now `line_item_adjustments` which
returns an ActiveRecord::Relation from order
Make Shipment `cost` returns sum of adjutments amount

Not sure if we need cost and adjustment_total attributes on Shipment
model
Fix line items taxing creation

Due to an association mismatch they were still being targed at the order
instead of line items as it should. tax_rate_spec was also checking
adjustments on orders instead of checking it on line_items
Simplify TaxRate `adjust` api

It receives a single item now as second param instead of a collection of
items
Include Order shipment_adjustments associations

Grab all order shipments adjustments in one query. That can help us
actually see on the UI which adjustments are created and at which
objects (order, line_item, shipment) in order summary as we move forward
on checkout
Update order totals in order `empty!`

Since we no longer have after_save callbacks calling order.update!
Update order.item_total before activating promotions

Also need to pass the order object already loaded in memory to
PromotionItemHandler because that's the object that contains the
updated, but not persisted yet, item_total
Include order.adjustments to set order.adjustment_total

The store should still be able to apply order level adjustments over
order total
Include CreateItemAdjustment action in engine initialization

So CreateItemAdjustment has only the FlatRate calculator available. I
think others will have to be created to play nice with a line_item
object
Add `create_adjustment` in ShippingMethod

Still need to figure out a place to trigger that method on the checkout
process.It should probably be done as a before_transition to payment.
Can't think of any other place right now given the current dependency we
have as everything is done via `order.update_attributes` and
`order.next`
Create shipment adjustments before transition to payment