Fix TimedDictionary error, and add some features

* There was a null reference error in TimedDictionary coming from trying
  to get the key of a null target. Getting keys from targets is now done
  via one careful helper method.

* Better timer disposal handling in TimedDictionary.

* Added try/catches to Pad to ensure they never throw exceptions.
  Particularly, exceptions from Deferred actions will not bubble out of
  the logger.

* Add FormatPreservingTINCipher, which encrypts FEINs in the format of
  an FEIN, and SSNs in the format of an SSN. One limitation right now:
  it will not avoid invalid TINs which are otherwise formatted
  correctly, like 123-45-6789. Further changes pending.

* Add some bitwise copying operations, and a binary printing method.

* Add DecayingCounter, which keeps a running weighted average where
  the weight of its entries decay exponentially over time from their
  initial value.