Implement "client" pattern for storage

Similar to #944, per #861

Taking #910 as a template, this is my proposed order of work: