With this commit, all events are queued for writing by another thread.

This is to avoid hanging on to event threads if a large volume of events is causing a delay whilst writing to the target (e.g. mysql)
Probably not much of an issue with the current user events, this is more to pave the way for recording high volume events like chat.
Uses BlockingCollection and ConcurrentQueue so now certainly > .net 4.0 only (which was already how it was configured).
Also employs some tricky stuff to detect whether the simulator is being shutdown - mainly because an OpenSimulator bug means Close() isn't currently being called for region modules.