Checkout, Customer Meta, Geography, Location Updates and Performance

*This PR includes:*
* refactoring and enhancement to our country/region/currency infrastructure.
* updates to how customer meta is handled eliminating multiple transactions between the checkout page and the server
* enhancements to how location updates are tracked, only refreshing cart and shipping methods when necessary, and only once per page view
* enhanced caching of geographic data eliminating 200-300 queries on some pages
* a new general purpose data map class that can maintain a list of items ready for efficient access. The class can also restore itself from cache, or regenerate itself from raw data.  All without any help from the outside, without loading data at startup, and without any knowledge of what type of caching or database is being used.

*This PR supercedes:*
PR #989 Customer meta and checkout
PR #1001 Country region currency API

*This PR should close these issues:*
#989 Country region currency API
#987 Region and Currency API
#984 Can we localize and include wpsc_user_dynamic_js using normal wordpress 
#982 Visitor meta not being cleaned 
#981Customer Meta Checkout Fields are empty 
#973 Customer Profile not using values in Customer Meta
#672 Country/State not copied to Checkout when user is logged in f:checkout
#667 Billing region (state) changes to my state when orders are placed f:checkout
#672 Country/State not copied to Checkout when user is logged in f:checkout
#708 Consistency of customer meta item keys and checkout item names 


*These issues might be resolved and need to be verified:*
#597 Checkout fields issue 
#140 Different Shipping & Billing Address doesn't transfer correctly to PayPal on Checkout. 

*These issues can be fixed pretty easily using the enhanced infrastructure*
#751 Shipping Same as Billing  can cause products to be shipped to countries which are not allowed

*Work to do...*
The database upgrade routines should use the latest class definitions.  They should still work as the intent was to preserve backwards compatibility. But we should do it correctly