Add a general cache to Context.

It's a property bag that can be used to store arbitrary Context-tied
objects and guarantee that they are destroyed (if necessary) when the
Context is destroyed.  This is a cleaner alternative in many cases to
local property
bags indexed on the Context's ID.
Use Context cache to store 1 pixel water masks.

Also fix a typo in ViewportQuad.
Fix warning.
Use the Context cache in BillboardCollection.
Avoid unnecessary indirection in BillboardCollection Context caching.
Improve naming convention for Context caching.
Add tests for Context cache destruction.
Make Context's cache private.
Merge pull request #528 from AnalyticalGraphicsInc/contextObjectCache

Context object cache