Refactor the way compilation units work

This is a relatively large rework of how interactive compilation units work, and how reconciliation and other semantic actions happen. The main goal was to clean up the Play plugin implementation and make it easy for other scala-based DSLs to be implemented in the same manner as Play templates.

The bulk of the work is in the last commit, see comments there.
Yes, this makes it more clear. So basically, the compiler works with the translated/created Scala file but the IDE has to show all information in the original file to the user?