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: I066c35aff295ea354ee081d8826a923787be6da6