Allow instances in STOPPING to be stopped

* Make it clear when we need to do things because we are entering or exiting
* Allow STOPPING to be stopped
* Properly do cleanup regardless of state
* Setup instances correctly
* Reap STOPPING instances since nothing else will
* Attempting to stop a STOPPED instance is a no-op

[#78231674]

Signed-off-by: Matthew Sykes <matthew.sykes@gmail.com>