implemented store updates

this required caching and updating previously retrieved store contents
to avoid always re-fetching the entire contents

there might be use cases where we only want to PUT without caring about
the store contents (i.e. never triggering `all`), but for now that's
beyond the scope of this library