Fixes bugs in ArgCache handling of None.

Now ArgCache will corrrectly hit the cache if the cached value is None.

The gory details:

This does it by using a special value, CACHE_NONE, and comparing against
that.  We could use some garbage string, but that's ugly, so we use an
empty dict, and as long as we compare against the *same* empty dict, by
id, it will work just fine, and there is no possibility of an error if
someone decides to cache the value 'adfskjalkfdjslk'.

All current APIs should work.  If you are calling ArgCache.get()
directly, you will still fail to cache values of None; replace your
    val = self.get(key)
    if key is None:
with
    val = self.get(key, self.CACHE_NONE)
    if key is self.CACHE_NONE:
The old API should still work, it will just miss the cache when it
shouldn't.  We don't think this even happens anywhere, so it should not
be a concern unless you're messing with ArgCache.