Refactor placeholder parser

This is to allow yield and await everywhere.

Also, restructur the code to reduce code size.
This might be clearer as two functions `keepPlaceHolders(sourceLiterals) -> source` and `dispatchParser(source, parseDispatcher) -> tree`