Estimator tweaks improvements (performance)

These were part of https://github.com/spree/spree/pull/5676 but I'm moving them here just so we only focus on the `order.contents.add` action there. I was too naive thinking I could review both add to card and the transition to shipment state in one shot.

Dont intend to do any more work here for the time being. Unless someone finds any issue with the changes or we get a broken build it can be merged soon into master. Reviews are much appreciated.
:-1: on this change. This is the wrong solution for a real problem. It complicates the API, and allows incorrect logic.

The more correct way to interface with this would be to ensure that `zones` is correctly loaded when this object is loaded with code like `Spree::ShippingMethod.includes(:zones)` when this object is loaded.

A more involved method of dealing with this would be to introduce the concept of a set of zones, so we can do something like: `zone_set.include?(address)`.