Move attributes to separate assembly
Switched to use .NET 4.0 ConcurrentDictionary instead of the home-built Cache class.

Benefits include significantly improved performance in the upcoming .NET
4.5, and a slightly simpler codebase.

(Original commit was slightly modified to remove whitespace issues)
#134 fix null reference exception with ProviderName