Use python logging framework consistently
Integrate logging and uncaught exceptions
Ensure root logger passes all messages to all handlers

This lets the handlers set their own levels. Otherwise all
handlers are limited to the messages that the root logger
is willing to pass to them (e.g. they only get messages that
pass root logger's level setting)
Enable real-time output from __run_test (e.g. simulate linux tee)

Instead of opening a file handler, just use the logging framework.
In addition to the normal StreamHandler, register a FileHandler to
save a log file from running each test.

The setup.py files depend on out and err file objects, so we fake
them with a new class WrapLogger. This allows us to see real-time
output from those files as well. It is also easier for the setup.py
files as they use subprocess heavily, and it uses parameters for
errfile and outfile
Modify requires_database, includes test type in check
Minor improvements to __run_test
Ensure certain messages are always printed to stdout

- Adds a default StreamHandler inside of __run_test that can
be used to send unformatted output to stdout. This basically
emulates 'print' while allowing the messages to also be
logged into the FileHandler
- Docs at top of FrameworkTest
- Removes some extra calls to basicConfig
- Refines WrapLogger to support all log levels
- Adds utils.py file to store usefulties
Move WrapLogger to utils file
Log raw data when validation failure happens
Replace manual text wrap with helper class

Our usage of textwrap was causing extra newlines
at the prefix and suffix of each message. This fixes
that issue and cleans up the codebase a bit
Prefix headers with newline

Changes this poor output:
   benchmarker : INFO     --------------------------------------------------------------------------------
      Starting go
   --------------------------------------------------------------------------------
Into this better output:
   benchmarker : INFO
   --------------------------------------------------------------------------------
      Starting go
   --------------------------------------------------------------------------------
Fixed typo in json validation call
Make WrapLogger work more reliably for subprocess calls
Refactor setup module starting

This enables much cleaner setup.py files and makes
debugging easier by logging each shell command from
setup.py before it is run.

- Pass setup_module it's decorator framework_test
- Use fw_test to run shell scripts
Initial code for setup.py helper class

Uses helper thread to automatically keep track of
subprocess.Popen output
Moving TestRunner into separate file