Refactor cart to accept metadata such as direct discount code handling, and add some scopes to variants, finally, allow destroy on nested attributes in variants and products, and make dependent data be automatically destroyed on parent destruction