Fix for issue #5306

See #5306

This fix forces the master variant (which is saved after the product) to throw an exception if validation fails.
because it is part of a before_save hook it will transient the product object as well.
Before the exception is raised, the errors are transferred from the master variant object to the product object so the UI can show them.

Another change is on the form_for function. The call now is more explicit because if the product is saved and then destroyed (because of the master variant validation failure) the regular form_for wont know it and will call the update action instead of the create which will result in an exception.
a nitpick, add a space in between `expect` and `{`