Refactor our controller-command/torrc-option processing logic into a data-driven function

Throughout our controller protocol and our configuration code, we process things with more or less the following metaformat:

 Line = PositionalOptions | KWDOptions | BothOptions
 BothOptions = PositionalOptions SP KWDOptions
 PositionalOptions = PosOption | PosOption SP PositionalOptions
 KWDOptions = KWDOption | KWDOption SP KWDOptions

 PosOption = QuotedOption | NonSpace
 QuotedOption = QString
 NonSpace = PChar*
 
 KWDOption = KWDName "=" PosOption
 
 PChar = a printing, nonspace character.
 QString = DOUBLE_QUOTE QContent* DOUBLE_QUOTE
 


 SP = One or more whitespace characters

We should have one generic function that parses a config line or command into a list of positional and keyword arguments, and another that takes such a list, typechecks it, and converts it into a structure (in the same way that config_assign does). The latter function could even be config_assign.

In theory, this should make our parsing more convenient, and remove a bunch of duplicate code.

(Did I already open a ticket for this? I'm not seeing it if so.)