[Constant Evaluator] Add a flag for denoting top-level evaluation
mode and separate out the code for top-level evaluation from the normal
step-by-step evaluation. This ensures that step-by-step evaluation
does not accidentally rely on any logic meant for top-level evaluation.
This change should not affect the observable behavior of the evaluator.