prevent assemblies from being ordered when components are out of stock

This changes the way that total_on_hand works for assemblies, and
prevents the cart from being updated if an assembly would be made out of
stock by purchasing one of it's components in addition.

Change-Id: Iac5d9d120f7bc9689afce5691207be067af12970