High-level wrapper around IndexedDB API with downgrade to localStorage