Moved manager.manage() calls to end of constructors (since manager
notifies its observers, these could access uninitialized fields unless
the manage call is made at the end of the constructor).
Fixed bug adding a new item of product that exists in a child product
group - ProductContainer now recursively detects that one of its
children contains the Product so a duplicate is not added.
Simplified fix to avoid adding duplicate products
Extracted and merged duplicate methods from
[Product/Item]SelectionChanged() in InventoryController to
InventoryListener.