Fix bug in checkout for buying digital goods

The previous skip condition for shipping bypassed the shipping method
view but this is required as it sets the shipping method code.
Reorganise checkout pre-conditions

Extract shipping logic into separate methods and add some additional
logic around checking baskets that don't require shipping.