Properly check for a selected shipping method and shipping option at checkout

* Make sure method and option are set and valid before validating checkout
* Make sure validity flag is initialized before testing it
* Test for any shipping modules needing zip code rather than just a shipping module named ups
* Don't clear cart contents on shipping quote selection update after some cart variables have been changed.  It causes changes to be lost, and the current shipping module selection to be lost when the cart page is redisplayed
* Wrap validation functions in cart class methods rather than reach into the cart class and test properties whose allowable values may not be well understood by outside classes
* Add wrapper functions for testing if shipping is enabled
* remove test on non-existent cart item class property

Addresses issue #1314

Thanks to @misulicus for helping isolate this