fix(client): Ensure the spinner stays spinning after signin for Sync/OAuth.

If the result of `submit` contains `halt: true`, the form is "halted" and the button spinner remains spinning.

Add a notion of "halt" to a form. I would like this to be called `disableForm`, but that name is already taken. If a form is halted, do now allow the fields to be modified, do not allow form submission.

Add a shed-load of unit tests for the form module.

fixes #1879