Add functionality for managing refs through the GitClient interface.

It mimics the functionality available for git tags: creation, existence-testing,
deletion, and lookup. It also mimics the behavior: names have spaces replaced
with underscores, creation and update are combined into a single forced
operation, and refs will refer to HEAD.

Unlike tags, refs are bare-boned, and do not include any attached message.