improve handling of exceptions in plugins

Exceptions generated when invoking a plugin's collect() method were
being lost when concurrent.futures.Future.result() was invoked, since
the caught exception would have a traceback relative to the parent
thread, not the child.  So we store the original traceback on the
exception within the child thread before re-raising, and then extract
and display that traceback when the exception is finally caught by the
parent.

We also now abort when the exception is found.
check for github API errors

For example, when two-factor authentication is first enabled, you will
get JSON like this:

    {
       u'message': u'Must specify two-factor authentication OTP code.'
       u'documentation_url':
           u'https://developer.github.com/v3/auth#working-with-two-factor-authentication',
    }
Merge pull request #38 from aspiers/plugin-exceptions

improve handling of exceptions in plugins