Improve PersistentDict warnings.
* Add a CacheCollision warning subclass. * Track stack level so that warnings show user code line numbers. Example: Modifying line 287 of test_persistent_dict.py so that the warning isn't captured by the test, we get this: ``` test_persistent_dict.py:287: CollisionWarning: pytools-test: key collision in cache at '/tmp/tmpq9p3i0b9' -- these are sufficiently unlikely that they're often indicative of a broken implementation of equality comparison pdict[key2] # user code ``` The old behavior was: ``` /home/matt/src/pytools/pytools/persistent_dict.py:466: UserWarning: pytools-test: key collision in cache at '/tmp/tmpuk8js9jw' -- these are sufficiently unlikely that they're often indicative of a broken implementation of equality comparison % (self.identifier, self.container_dir)) ```