[new AA] aaLiteral compiler support

This is a dmd part of the new AA implementation. 
This PR depends on D-Programming-Language/druntime#1046 and uses new aaLiteral version (with arrays of keys and arguments)

Ok I guess forward reference isn't exactly the right term.  IIUC you're building an expression something like `handle.len(cast(void*)aa)`, but you're not running semantic on it and you're not filling in the type field manually.  So it crashes, because the type _must_ be set on all the ast nodes before calling optimize.

So you'll need to either set the type manually, or run semantic and let it figure it out.  Which one is best depends on where/when you're constructing the expression.