added Lazy.factory for wrapping arbitrary data sources

name will almost certainly change. for now this is just to
illustrate an idea.