Removes a lot of logic out of the controller and into model per https://...

...github.com/spree/spree/pull/4331

This PR is pending review of https://github.com/spree/spree/pull/4331 .

You are probably aware that there are some failing tests currently on master.  I was not able to verify the correctness of this commit.  Hopefully we can work together to resolve?

Cheers