Perform self upgrade automatically
The CLI already checks for updates and emits a warning prompting users to upgrade. We should take this further and perform the self-upgrade automatically. To make this less annoying the self-upgrade should be done in a background process, i.e. not block the current CLI command execution. That said, we can probably still do a blocking self-upgrade (and auto re-execution) if the CLI version is older than a certain cut off date (e.g. 3 months). There should obviously be an opt-out flag, which, I think, should be extending the GEL_RUN_VERSION_CHECK enum to include and default to "auto-update" (also possibly include more specific variants: "auto-update-background" and "auto-update-immediately").
As part of this, we should add a "self-test" command that 1) prints a string and 2) exits the process with a specific exit code so we can ensure the binary is "good".