Add .once and .observeOnce, fix inflight unsubsribe

Fixes #1504, closes #1423