Bug 1063109 - Required carts should be handled higher in the model

This ensures that sufficient context is available to remove carts with 
requirements, and add requirements in add/remove_cartridges.

Added a few more functional tests.

[merge]