Clarify the lock semantics
Narrow the scope of lock required to get the pending nodes.

- Too many things have incorrect locking assumptions on calling NodeProvisioner#getPendingLaunches()
- Simpler to narrow the lock requirements as that should prevent deadlocks
- We now only need the lock for a very short window and the lock is only on the list of pending launches.