Usability improvements around the patch workflow

From Github

https://github.com/radicle-dev/radicle-upstream/issues/2768

Patch interactive selection

As a maintainer I have to paste in a patch handle to use the upstream CLI effectively because patch handles are very long. This requires my to copy the patch handle from somewhere

Patch commands require a patch handle don’t require a fixed format. They try to guess the intended patch from the input if possible and show the user an interactive list of candidates the user can select from.

This feature can be build in the following steps

  1. If the user does not provide an argument to upstream patch fetch we show a list of all unmerged patches. The user can select the patch they want
  2. If the user specifies only the name of the patch and not the peer ID we determine whether there is only one patch with that name. If so, we fetch that patch.
  3. If the users specifies some string as the argument to upstream patch fetch and that string does not uniquely determine a patch as in 2, we show an interactive list of the closest matches.

Passphrase retry and key cache

As a user I have to input my passphrase every time I create, update, or fetch a patch. When I put in the wrong passphrase the whole command aborts.