Python3 support

Most of the changes were either six.moves related and/or
bytes vs. str.
Bug fix for argparse behavior change in py3

See http://bugs.python.org/issue16308 for more info.
The workaround is to just simulate what's suppose to happen,
which is to print the usage info, print an error message, then
exit.
Merge branch 'python3'

Adds python3 support.

* python3:
  Bug fix for argparse behavior change in py3
  Python3 support