Add INotifier.

The Notifier is an awesome tool to write thread safe communication classes.
Imagine you have two loops in different threads and you want communicate between them.

For example, something as easy as this could be implemented in order to provide convenient communication between loops in different threads:

```csharp
class Notifier<T>
{
    Queue<T> queue;
    Notifier notifier;
    Notifier (Context context, Action<T> callback)
    {
        context.CreateNotifier (context, () => {
            T item = null;
            lock (queue) {
                item = queue.Dequeue ();
            }
            if (callback != null) {
                callback (item);
            }
        }).Start();
    }

    public void Notify (T data)
    {
        lock (queue) {
            queue.Enqueue(data);
        }
        notifier.Notify ();
    }
}
```

Still some locks there, but they are pretty much minimal and are needed if you want to share state between 2 threads.