Lazy KVO signal

#285 

A couple notes:

* I took the opportunity to clean up some of the KVO wrapper stuff and removed it from the public headers and framework header. It's really an implementation detail that we shouldn't publish.

* KVO signals now send on the queue in which the KVO callback was received instead of always bouncing to the main queue. This was never documented so hopefully consumers weren't relying on it.