Refactor the workshop signup flow to better handle error cases

There was a bug that could be triggered whereby a user could cause an error in payment after the `WorkSignup` model had already been created, which would cause the form rerendered in the new action to point at the `update` action for that model. Since the controller had no `update` action, any subsequent attempts to correct the issues and sign up would fail.

I created an `update` action and pushed down more of the signup logic into the model, which signals the controller by raising errors.