Make order-update concurrency safe

When two order-updates happen at the same time, we can loose one of the
updates without this change. This locks the row on select, ensuring that
any subsequent changes don't get overwritten.

ORIGINAL COMMIT: https://github.com/bonobos/spree/commit/be9bb2a6bcfc72f186e4641516fdd00fc2b724f0
ORIGINAL AUTHOR: https://github.com/magnusvk

Additional Notes: We discovered an issue with the Order API. Trying to get our change reviewed/accepted into Spree to minimize future upgrade pain points.

extensive concurrency fixes across frontend, core, api

these changes were made at the suggestion of Spree to get a more comprehensive fix in beyond API.

* made current_order helper take hashey args to support multiple lock option
* change existing code to use hashey args
* renamed filters to have with_lock to indicate we are locking on the read. all of these filters were for write actions on the controller (from what i saw)
* incorporated magnusvk fix for checkout api controller (https://github.com/bonobos/spree/commit/817be320dacca498d8c4bbf755c46458ec2b4dcf)

Fixes #4286