Error statuses

Mostly this just improves error messages, but minor 'breaking changes' (which we *could* choose to interpret as bugfixes) are
 - if a `get(id)` for a single id fails the promise rejects
 - if a `.get([ids])` fails for *every* id then the promise rejects