Fixes defaulting behavior in tag for caching purposes.

Previously, Tag.getTag, Tag.getProgramTag, and Tag.getBooleanTag all
handled their own defaults (sometimes incorrectly).  In other news, the
caching code doesn't work very well when storing a cache key of None; in
particular it will always ignore the cached value.

This fixes both the weird default handling and the cache None behavior.