start working on an in-memory datasource, mostly used for testing, but potentially usable elsewhere