Changed -rac_addObserver:forKeyPath:options:block: to accept nil observer.

See #567.

I also added an assert for `NSObject`: `OS_object` subclasses `NSObject` so it gets the swizzled dealloc, which then crashes because calling `@synchronized (self)` on an `OS_object` causes a resurrection.

I haven't found any hard rule on not using `@synchronized` in `-dealloc`, we never had any problems with normal objc classes, and using a dispatch object or other OS object as observer is unlikely, so I left it as it was. Better keep this in mind though in case it also causes problems for Core Foundation objects.