Factor out form construction for use in tests, and by subclasses.
Separate validation errors from success-processing errors.

Success methods should raise s.forms.FormError to indicate failure.

On such errors, the form re-renders w/ the posted values, and flashes
an error message based on the exception.
Use new Locked context mgr when applying propertysheet updates.