Further improvements

- upgrade without health check if keepAlive is 0
- fail if keepAlive is requested but no health check is set
- take AppDefinition instead of app id