I'm in the middle of a big change to internals. Remotes have buried inside
them a string-based configuration, and those settings are only parsed when
they're used, so bad configuration is often ignored rather than being
detected when the user inputs it. The parsing is moving to happen upfront.

This is something I could not have done when I first wrote git-annex,
because the values that get parsed have many different types, so how can a
single Remote data type contain those, whatever they are? Now I know how
to use the Typeable class to do such things.
