Initial commit starting work on prefsutil

[#1 status:In Progress]
Core functionality complete

The prefsutil program lets you read, write or delete individual plist items from the command line. It's sort of one step easier than vi-editing plist XML files by hand.

The only significant change to Preferences.py was keeping it from writing out an empty plist file when a new, empty Preferences object is instantiated. Now it waits for a key/value pair to be added before writing anything to disk.

[#1]
prefsutil read can now read a whole file

In addition to reading a specific preference with prefsutil read <file> <key> you can now read out an entire file's preferences in more-or-less human-readable form with prefsutil read <file>.

Note that this depends on the JSON parser to generate the human-readable output, and technically it's possible to have a plist that can't be JSON-encoded. But this probably won't come up, he said. A oppressive silence fell. Far off in the distance, a dog barked.

[#1]
Merge branch 'feature/prefsutil' into experimental
prefsutil --stringarray foo bar baz

prefsutil can now take arbitrarily long (or short) arrays of strings as typed arguments to prefsutil write.
Added a __contains__ method.

Objects that act like dictionaries need __contains__ to be able to handle the "if <key> in <object>" syntax.
BackupMonkey now uses the new prefs system

Did some fairly majory surgery to get BackupMonkey to use the new Preferences system for most of its settings. Conspicuously did NOT migrate anything having to do with email; that'll be done differently later. Along the way figured out how to use distutils.spawn.find_executable to call tar in a platform-independent way.
Merge branch 'feature/Monkey_prefs' into experimental
Wrote a new buffering email logger

This new log handler uses the Preferences system for its basic settings — SMTP user and password, server and port, as well as the email sender, recipients and default subject. All those can be overridden by the calling app.

Note that BackupMonkey has NOT yet been rewritten to use the new logger. That's next on the to-do list.
Tweaked a few changes to EmailLogHandler

Has a global debug flag in the prefs plist now. Also intelligently forces recipients to be an array allatimes. Also also found a wee little print statement hiding down in the guts which I responsibly excised.
The Monkey now uses the new EmailLogHandler

It also gets a sensible-defaults preferences file.
Merge branch 'feature/Email_breakout' into develop
switchto now calls install instead of version
Refactored the logging code out

Also subclassed Formatter to separate console formatting (color, etc.) from the actual logging process itself, so log messages that get sent to email or other handlers won't get unnecessary escape characters or whatever.
Monkey now uses new refactored logging routines
Removed now-unnecessary TLSSMTPHandler
Added trace and alert log types
Removed trace() and all trace() calls
Changed debug logging level in Tango

When --debug was given on the command line, the logging level was set to DEBUG, which meant DEBUG and up messages were logged. I changed it so --debug logs ALL messages.
Fixed an erroneous exception constructor