Use TaskScheduler.Default so we don't deadlock VS

TaskScheduler.Current uses the UI scheduler if this class
is instantiated from the UI thread. This causes the 'DoTrace'
method to block the main loop forever.
Merge pull request #2 from alanmcgovern/fix_deadlock

Use TaskScheduler.Default so we don't deadlock VS
Improved documentation on the TextTraceListener
Added miscelaneous tests
Changed smart cast operator to work on the actual type TSource, instead of the base class' one.