Port Java version of Doctor to Python
Forking mail subprocess before fetching descriptor data

Nope, attempt to garbage collect the descriptors didn't do the trick. We're
still triggering OOM errors. Plan 'b' from...

  https://stackoverflow.com/questions/1367373/python-subprocess-popen-oserror-errno-12-cannot-allocate-memory

... is to fork our process before gobbling up a lot of memory. I don't like
this - there should be a way of subprocess without doubling memory usage.
Fixing perdulce's overcommit policy would also be a preferable solution.

Oh well. Hopefully this does the trick so I can stop looking at it.
change function names to underscore style, and abstract out a couple hardcoded constants
Shift bot notification to generate subprocess early too

When I made the prior commit I knew there were a couple other spots we forked,
but wanted to see if it worked for the main email first. Seems to, so shifting
the bot notice too to prevent OOMs. The error notification still forks, but
leaving it as-is for the moment since it seems to be working (that's how I'm
being notified of OOMs, after all).
Add 'Support022HiddenServices' as a valid configuration param
Didn't update all the function names everywhere the first time
Merge branch 'python-website' of github.com:tomrittervg/doctor into python-website
Use the known params from the config file, not a random hardcoded list
Remove an errant space from the flag table
Disabling check that the BadExit flag is in sync

This check was busted for quite some time and I fixed it this last weekend.
However, it's generating a lot of noise and it's not useful so disabling this
check.
Add a function that shows whether or not (and how) each DirAuth signed the consensus.
If the DirAuths are segmented (e.g. one or more is not voting on the Consensus, and serving an old consensus) make sure we generate the website off of the most recent consensus generated.
Instead of assuming any conensus valid in the last hour is the latest, compare it to the previously calculated latest_consensus.
Keep track of the consensuses that were out of date.  If they are out of date, don't look for missing signatures on them, as that's not the most relevant thing wrong with them - it's a symptom, not the cause, of an error condition.
Display the valid-after time of the consensus displayed for authorities who did not sign the real consensus.
Merge Damian's commits from 'official/master' into python-website
Implement Consensus download statistics

(Does not yet store the new statistics to the file)
Record the download times to download-stats.csv
Fork doctor

This commit removes consensus_health_checker and solely focuses on building the website.  This repo will be renamed when this is merged to master.
Web-Ready Commit

Add favicon, stylesheet, and update paths with absolute paths suitable for cronning.