Fixed error in fetchData exception handling

For some reason, when using the logging framework, wrapping the
exception object with str() caused an error.  Using string.format()
seems to make it work properly.
Fix for issue 28

Moved the team game log scraper over to its own class, added a parsers
directory, and refactored the scraper to use Beautiful Soup instead of
the built-in Python library.
This has cut down the code considerably and is much easier to use.
Fix for issue 27.

Added rank attribute to DefenseVsPosition.  Also created a
calculate_dvp_rank script that can be added to all_tasks.sh.  This way
we’re not relying on the projection generation process to calculate the
rank for us, which is a slightly awkward approach.