Experimental:
Replace clj.core/promise with a result-channel, public api is identical, but when an exceptions occurs deref rethrows it instead of returning the exception as a value, callbacks are unchanged, success deref is still the same, we take a 10-15% hit compared to clj.core/promise version (only on the promise setup+deref, not the whole query).
And we gain composability with the rest of the lamina api (channels, pipelines, timeouts, and so on).
tests with cljque showed it to be 3x slower overall.