cart persistence enhancements

* added enhancements so it doesn't restore on every request, only first time.
* added enhancements so it doesn't persist on every request, only if the basket has been updated.
* added logic for a customer restore strategy, options:
  * None = The users prior cart is used, overwritting the stored values on the Registered User on the next basket update.
  * Merge = This merges the previous and the stored carts.
  * Overwrite = This overwrites the previous basket with the one stored on the Registered User
* added support for ajax calls, by adding pipeline steps to the mvc.* pipelines.
* added support for multiple coupon codes.