Add some convenience scripts.

Useful for bootstrapping installation on new machines.
Diagnose and describe the Lutron HTTP server/curl confusion.
Logging improvements:
- Log the source (logger name) as part of each line in the logfile.
  The way I was reading the logfile, I expected the thread name to
  be more informative than it is; I really wanted the logger name.
- Use the correct logger in the DSC Panel Listener's "here I am"
  message.
Fix argument order bug in send_user_command, which was transposing
the partition ID and command ID arguments.
Prevent infinite device-change loop when a device (not controlled
by Lutron, but bound to a Lutron button with synther) changes
outside the Lutron button control, synther tells the Lutron button
it changed, and then synther sees the Lutron repeater say it changed
again.

Clean up the ignore_time mechanism, and reuse it for this.

This might not be the right way of dealing with this -- it seems
there is another bug lurking, because I'd expect that the message
from the Lutron repeater saying it changed should carry the state
it changed to, which is already the current state, and we shouldn't
respond further. But good enough for now.
Actually use the device-on state (from DSC) in the Lutron-button-push
handler, so that we only invoke DSC command-toggle to change it if
the current and requested states differ.

That basically obviates the need for the previous change, with the
quiesce hack; I thought I'd already done this, but that's not true.
Use logger instead of print().
Be a little more careful with types; use ints instead of chars
(1 instead of '1') for DSC partition and command IDs.

Both work, but this is what I always thought I meant, and meant to
mean.
Rip out the ignore-spurious-Lutron-changes-at-startup mechanism;
it shouldn't really be necessary now that I'm actually comparing
the actual and requested device states and only sending an action
when they differ.

This seems to glitch at startup for lights that are already on
(they turn off, and back on) so it may be necessary again, but it's
ugly so for now let's try without it.
Cleanup.
Use a synchronized queue to bounce DSC commands off of a worker
thread that will enforce a delay between them, instead of sending
them right when we want to and possibly bombarding the DSC panel
with commands it will drop on the floor.

This makes my outdoor-all-off Lutron button via synther work: if it
turns off several lights, before only the first one would actually
change state; now they all do.