Rework shipping methods

This PR reworks shipping methods. The consequences are quite long-reaching.

The main change is to make shipping methods stateless instead of carrying a reference to a basket around with them (#812). Having a basket reference made them unsafe for threads (if instantiated at compile-time). This change gets rid of that.

However, splitting shipping methods from charges requires quite a few function/method signature changes as the shipping charge now needs to be passed around with the shipping method. Also the handling of shipping discounts (which is tricky to begin with) required some adjustment.

One mechanism for handling this is to introduce a few template tags to calculate and inject shipping charges.

Will write docs once some :eyes: have looked over this.