Support storage and migrations using custom thenables

Don't require storage and migration implementations to
return Bluebird promises - any object with a then(...)
method should do.
Merge branch 'promise-interop' into signpost