IndexedDB API wrapper with Promises