Refactor to make roles clearer

This is how I'd approach the identifier / observer issue: make DGKVOBlocksObserver less opaque and more immutable, and keyPath-agnostic which makes separation of roles clearer.