Don't do app upgrades in the background

This removes the logic for transparently upgrading apps and moves it to the same system we use for core upgrades.
Transparent app upgrades can leave the instance in a broken state when requests are being processed in parallel.

Only doing the upgrades in the foreground prevents this and provide a way for users to know when an upgrade failed.

cc @DeepDiver1975 @PVince81 
Trouble with this is that it will block everything with 503 service not available.
Do we want to block all services whenenver a single app needs updating ?

Needs update means the code is already different so an update is indeed needed to avoid unpredictable side effects.

So yes, seems to make sense.