Async notification fixes

Switch to the correct thread syncronization method, Monitor and lock{}.
Use a reasonable timeout on Poll(), which take micrseconds, not milliseconds.
Mono specific workaround for seemingly buggy System.Threading.Monitor implementation.
Remove compile time condition on Sleep() in ProcessServerMessages().
Merge pull request #61 from glenebob/async_notification

Async notification fixes

This will fix the CPU hog problem you were seeing, and eliminates the need for the odd Sleep() call in ProcessServerMessages().

-Glen