Add a class for interacting with git config

This commit adds the GitConfigStore class. This allows us to easily get and set keys and values in git config.

The purpose of this class is to enable commands to use  `git config` in a unified manner. The functions to get and set the default imerge name now use this class.

The class is memoized to avoid repeated calls to `git config`.

Tests pass.
This was confusing to me. Let me see if I understand correctly...

This level of memoization is so that if the code tries to create multiple instances of `GitConfigStore` with the same `name` and `config_prefix` arguments, that only on instance is actually created.  Right?

This is distinct from the caching that occurs within the `GitConfigStore` class itself, which is about reading all of the configuration values in a section of the config file and keeping this cache in sync as values are changed or removed.

It seems a bit overengineered to me, especially the fact that `memo` effectively uses a global cache. Wouldn't it be more straightforward to store an instance of `GitConfigStore(name)` in the `MergeState` instance? Or will future changes make it necessary to access the config for a given `name` from outside of that class?