Cleanup some arbitrary contraints on REQUIRES_DYNSCOPE flag

* Use 'DYNSCOPE_ELIMINATED' flag consistently to decide whether
  to push/pop scopes during interpretation.

* Refactor 'unsafeScope' in IRScope and use it to decide whether
  we can only run a restricted set of passes on a scope.
Fix LiveVariableAnalysis for standalone runs on closures.

* So far, LVA could only be initiated on methods -- in turn, nested
  closures would get LVA run on them.

* However, in upcoming patches, we might end up running LVA on
  closures independently because of dependency issues. Rather than
  try to work around those, it is simpler to allow LVA to run on
  closures independently.

* Fixed/pre-empted a possible crasher in LVA for nested clossures.
Add previouslyRun / invalidate options to DCE pass.

* Base this on LVA state for the scope.
* Can prevent useless duplicate runs in some scenarios.
Allow dynscopes to be eliminated for block scopes as well.

* So far, dynscopes were only being eliminated for method scopes
  and all blocks had a dynscope pushed/popped.

* This patch enables this for blocks as well.

* Required a whole bunch of changes.
  - Ensure that scope-flags are initialized before passes are run.
  - Split AddLocalVarLoadStoreInstructions into two pieces.
  - Use the 'ensureInstrsReady' pattern in InterpretedIRBlockBody
    to run necessary passes and figure out whether the scope can
    be fully eliminated, whether the parent's scope can be reused,
    or whether we need a full dynscope for this block.
  - Overall, there are some quick-and-dirty fixes in this patch
    to get things working. Cleanup will come in later patches.