Let the User object be retrieved from System.Environment as a fallback to HTTP and don't fail on null values
Updated documentation for RavenClient.Logger
Added SentryUser constructor test for null username
Added IJsonPacketFactory interface with default implementation
Cast the dynamic User property to IPrincipal to clarify which SentryUser overload to use.
Extended the Create method signatures in IJsonPacketFactory to match those of JsonPacket's constructors and added a simple OnCreate method to JsonPacketFactor that can be overridden to adjust the JsonPacket's values before it is sent to Sentry.
Implemented the usage of IJsonPacketFactory in RavenClient
Added JsonPacketFactoryTest for the OnCreate method
Added a bunch of JsonPacketFactory.Create tests
Removed Console.WriteLine and turned the JSON formatting off
Fixed Dsn creation so it throws ArgumentException for all problems related to parsing the DSN and added a test that verifies it.
Made RavenClient.Send() protected and virtual so it can be overridden and added a test that verifies that both RavenClient.Send() and JsonPacketFactory.OnCreate() are invoked when RavenClient.CaptureMessage() is invoked.