Issue #27 Lifecycle stuff, ready for final review pass

Before I start implementing this all over the place!
Okay, I see what you're saying - it's a 3 state latch, rather than 2, and `setCache()` unblocks readers no matter the cache value...