bug 1079932 - Convert load_spec_data to sync

tools/load_spec_data.py now reads existing data, compares it to data
loaded from SpecName and Spec2, determines new, updated, deleted, and
unchanged data, confirms with the caller, and then executes the
operations.

Also:
- Adds tools/resources.py, for storing related API data
- Adds tools/tests/test_resources.py, for unit tests
- Adds subset of tools to automated tests and coverage
- Adds support to Client for deletes, updates, and URL generation
bug 1079932 - Handle null to TranslatedTextField

Handle passing JSON null as value of optional TranslatedTextField.
Previously, TranslatedTextField.from_native expected a string value.
bug 1079932 - tools/load_webcompat_data.py to sync

Convert tools/load_webcompat_data.py to use sync semantics rather than
load to an empty API semantics.  Includes:
- Handle null IDs (for example, feature.parent for a root feature)
- Handle 'falsey' IDs (such as placeholder 0 for the chrome Browser)
- Switch Resource.to_json_api to default to including sorted fields
- Fix Support.alternate_name_mandatory to Support.alternate_mandatory
bug 1079932 - Add tools/download_data.py

This tool is used to download the data from the API.
bug 1079932 - Add tools/upload_data.py

This tool is used for uploading data from disk versions of JSON API.
bug 1079932 - Refactor logging and API download

- Loggers are now names 'tools.(module name)', and command line tools
install a handler for the 'tools' logger.
- Client.get_resources now .get_resource_collection, drops logger_name
  parameter.
- Collection.load_all now uses Client.get_resource_collection, for
  better logging of massive resource chains.
- Collection.change_original_collection drops logger_name parameter