Grand rewrite of import diagnostics.

It is now in two phases: information gathering, then output generation.
This separation of concerns has made the code much more adaptable and readable.
I.e. the code isn't Dark Wizardry anymore, any GSoC student should now be
able to create new reports or change and existing one.

Minor improvements that also happened along the way:
- The information gathering phase is robust against exceptions during imports.
- Improved command line options
- Prepared several new reporting options (these motivated the rewrite)

Currently, only one of several reporting options is implemented.
I'm committing this for feedback; merging into SymPy is possible (the code
is never called anyway) and may be useful to make it easier to play with it,
but not necessary for production or for my ongoing work.