Overhaul of git hf feature checkout

This PR is based on almost identical PRs from:

- @bmomberger-reciprocity
- @jhofmeyr

It overhauls the 'git hf feature checkout' command to do the right thing when trying to checkout a local feature branch, a remote feature branch, or when the branch you're trying to checkout does not exist.

It also tidies up the 'git hf feature list' command to also show feature branches that exist remotely but not locally, and to show which feature branches have been merged (and so can be finished).