Remove rescue_from GatewayError in CheckoutController

The error is already rescued in the model level when running
`order.process_payment!`
Add a checkout_errors attr to order object

So that we can keep track of checkout errors and return a general
message in case no specific error is defined. e.g. Currently
ChekoutController assumes that every time `order.next` returns false it is
due to a payment failure and that may not be always the case
Raise error when Estimator can't generate shipping rates

Spree shouldn't display a package that doesn't have any rates. That
causes error later on as the store assumes every shipment has at
least one shipping rate
Make `order.checkout_error` just a string

instead of an array because one reason is enough to prevent users from
going to next checkout step. It also helps to show the general "Server
error" message only when for some reason we can't really tell what's
going on with the order