[WIP] make ASTs cachable

Also pass in the coalescence `Map<String, WatchRecord<_Handler>>` cache.