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.