Adding tracing via TraceSource and adding TraceSwitch for controlling the level of tracing using System.Diagnostics.Trace

Instead of repeating this kind of code everywhere, but about just creating a ThrowArgumentException method that creates the exception, logs it, and throws it.  Then you only need a single line and you have a single place to update this in the future.

DRY = Don't Repeat Yourself.