Add support for write-without-read (set) and update-aware expiry

The change here boils down to storing the `Expiry` time (`LifeTime` + `TTL`) on the object in ETS, and then passing `Expiry` to the expirer, which then does a more discriminating flush.  At expiry, it will only delete the value from ETS if it hasn't since been updated.

These changes give us the following functionality:
- write-without-read (the ability to call `set` without awkwardly having to implement `get`)
- the ability to update values prior to expiry -- until now, pre-expiry updates were prohibited, or at best they got stomped at the original expiry time.

This also fixes a very minor issue that when LifeTime = `infinity`, the `send_after` call was failing silently.  The fix eliminates the `send_after` call entirely in that case (no reason ever to expire).