[WIP] make ASTs cachable

@mhevery I didn't notice before, this already is ast.dart file. All other ASTs are here.