Make createSchema() set and return a new promise or a reference to a previous one

This makes associate() and describe() more easily testable.
Add tests (fixes #1)

Decided to use in-memory SQLite for this, but perhaps that could be mocked?