Custom product data

This PR is for merging custom product data into the custom user data branch (https://github.com/dimagi/commcare-hq/pull/4292) that it was branched off of. Ultimately these are going live together, but this PR is being made to make review easier.
The name of this method implies that it checks if the data is valid. As a side effect it also saves the data if it is valid. Seems like it should be renamed. Something like
```py
def save_custom_product_if_valid(self):
    """Save custom product if it is valid

    :returns: True if the product was saved, otherwise false.
    """