Add explicit product structure field & consistently name product structures

To lay the groundwork for a "variant product" dashboard redesign, this PR makes handling of what is now called child products more explicit. The two main changes are naming changes, which are reasoned about in the commit message for https://github.com/tangentlabs/django-oscar/commit/3748e8305756c73a1373c4961739edec2b73670c, and introducing a ``structure`` field to explicitly set the product structure instead of implicitly determining.

As a a welcome side effect, this tightens the product validation. 

Still needs docs, which I'll add once @codeinthehole had a look at the API changes. 
Should we deprecate these methods or just remove them outright?