WIP support for card profiles
initial commit
fix null constructions
oops
action, not option
maybe fix app mode?

A sources-output can only be moved to a new source, and a sink-input can
only be moved to a new sink. So, derive the target type based on this.
Also, reroute sink -> sink-input and source -> source-output to save
some keystrokes.
alias sane types to --device flags
eschew _unused_ attribute
makefile: CFLAGS -> CXXFLAGS
rename class Pulse to PulseClient
ponymix: validate arg count before invoking function

A few changes make this fun and easy:

- Merge the function array into the string to action lookup and return a
  Command instead of simply an enum. A Command is the function and the
  min/max arg count.
- Implement an InRange method for the Range class.
- Add a Dispatch function to convert the string to Command and validate
  the arguments.

This leaves us in a position where the argc parameter to each method is
never used, but maybe some day a command will be added that takes a
range of args rather than a fixed number.
Derive the card from the targetted device

Unless explicitly specified, target a card based on the selected device.
Note that not all devices will be tied to a card.

falconindy  » put differently, if i have multiple cards, what determines which
              card is used by pulse for a given app?
tanuk       » In theory, the logic can be anything (it depends on what
              policy-implementing modules are loaded). By default, routing is mostly
              handled by module-stream-restore, which chooses the sink based on the
              user's previous routing choices.
tanuk       » If the user hasn't done any routing choices, the fallback logic is to
              select the current "default sink".
tanuk       » I don't recommend trying to guess the routing policy.
falconindy  » i guess my understanding of pulse internals is lacking
falconindy  » but that's rather enlightening
falconindy  » is there any way to figure out the connection between a sink and a card?
tanuk       » Yes... (One moment, I'll look up things.)
falconindy  » ah. uint32_t card
falconindy  » appears to be in pa_sink_info
falconindy  » so that ties the sink to the index of a card?
tanuk       » Yep.
falconindy  » awesome, that's good enough for what i need to do
tanuk       » Not all sinks are part of a card, though, but those that are will have
              the card index set.
falconindy  » also good to know
always defined behaviors for devices
remove string_to_device; PulseClient can do this now
whitespace police
fix abort on set-profile after removing profile

ponymix set-profile off
ponymix set-profile output:stereo-da+input:stereo-analog
<kaboom>
A dash of color...
implement -short variations of list verbs
remove defunct enum
reorg usage output