CompilerInstance is a more appropriate place for a key component of
the frontend like Semantics.
This change opens a path for us to introduce new frontend actions that
will also run semantics, but for which inheriting from
PrescanAndSemaAction wouldn't make much sense. For example, for
code-gen actions we plan to introduce a dedicate hierarchy of action
I've also added a doxyment for CompilerInstance to add a bit of
context for this change (and also make future refactoring more informed).
As CompilerInstance in Flang has been inspired by its counterpart in
Clang, this comment is roughly a verbatim copy of the comment in Clang
(with some adjustments from me). Credits to Daniel Dunbar for the great
design and the original comment.