Huge refactor and cleanup

* Create `optional` and `mandatory` scopes for OptionType
* Refactor Product#master_price method to remove huuuuuge one-liners
* Create `product_options` association in OptionType to
  stop using the manually crafted "options" array.
* Put logic in OptionValue to return the `price` based on
  different conditions (e.g. distributor or regular user)