Thread-safety & UI safe access across threads added.

Access to the observer collection is now locked to the thread accessing
it.
Observer code can now be ran on a specified thread, even if called
Asynchronously. This is primarily intended for use with UI interaction.
Improved formatting to be more standard.