Improved logging with runtime levels.

Logging is now enabled for all build flavors. Levels can be turned on
and off at runtime, and this functionality is exposed externally. This
also exposes the ability to optionally set the logging dispatch queue.

The default for debug builds is DEBUG level (everything), while
release builds default to ERROR level. The app can also set the
DISABLED level, which will turn off all logging.

If no logger has been attached, then NSLog will be used, but only for
debug builds and only if the logging level is met.
I don't trust that it isn't over-utilized at the moment. Error level is what we had before non-DEBUG builds, so this keeps it consistent. Also, the app can now change it at runtime, so it matters less what value goes here.