In order to implement -time-passes functionality we need to be able to pause
PassManager's own timer when starting execution (and timer) for nested passes.
For that we need to be able to track which PassManager is currently being executed.
Adding startPassManager/endPassManager points to PassInstrumentation and call them
in all the pass managers/pass adaptors. Also adding startIteration point for
repeating adaptors (e.g RepeatPass) since that was pretty much the only
remaining piece of nontrivial pass execution tracking we were lacking
(albeit not needed for -time-passes).
Introducing PassExecutionLocation which is a wrapper for PassExecutionCounter
to provide a stable interface to be able to extend it later with extra information
(e.g. pass execution stack) if needed.
All the callbacks now take PassExecutionLocation.
Majority of the changes are rather mechanical ones.