[WIP] make ASTs cachable

It would be nice if AST did not depend on FormatterMap. `Dynamic userData`