There needs to be a way to update existing applications in the new artifact world. Update means any of:
1. change the artifact version to use (both upgrade and downgrade)
2. change the application config to use
Internally, these are both the same thing, in that they are updates to the application spec. The spec contains information about all the programs in the app, the artifact to use, and the app config.
Expected behavior needs to be defined for programs during the app update:
1. If a program is removed from the app spec, it will be stopped. If stop fails, app update fails.
2. Newly added programs will start in the stopped state.
3. Existing programs will be untouched. Stopped programs will stay stopped. Running programs will stay running and use the old spec. The next run for a program will pick up the current app spec. This also suggests there should be a way to get the app spec used given a run-id (not currently there).