Determine Spawn and Sync with metadatas

- Updated tests
Late Cilk stack frame initialization optimization

- If all cilk_spawns in a function are only conditionally executed, then move
  the stack frame initialization to the point of the first spawn(s).

- Also update the parent prologue, epilogue and syncs to be conditional, by
  checking if the sf->worker is null.  This is necessary in case we call these
  in a path that does not spawn.

- Any spawns or syncs that are dominated by one of the late initializations is
  not modified, since the stack frame must be initialized.

- Also refactor some common code out of the elide-syncs pass.

Reviewed by: Andy Zhang, Wei Pan