Merge pull request #16 from jwhitlock/1098672_mdn_uri

Fix 1098672 - Convert feature.mdn_path to mdn_uri
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
bug 1079932 - Add docs for data repository

Data is stored at https://github.com/jwhitlock/browsercompat-data.  Can
be moved to Mozilla-owned repo, or a new repo can be created using
tools/download_data.py.  Data and API code is at
http://browsercompat.herokuapp.com.
bug 1079932 - Improve browse app for Versions

- Display dates as 2014-12-05 w/o hour / minute / second
- Wrap release_notes_uri links in <a></a>
fix bug 1079932 - More ordering in JSON API

- Translated fields - 'en' first, then other languages in alpha order
- Use OrderedDict more to preserve order
- Use unicode more consistantly
- Use JSON serializer in diffs, to preserve field order
- When order doesn't matter, sort related IDs by ID in cache
bug 1077879 - Add HTML variant of feature view

Includes basic representations of resources, including:
- Browsers - Translated names
- Features - Translated name, default flags
- Maturity - Translated name
- Section - Translated name, number, notes, and link
- Specification - Translated name and link
- Supports - 'yes' supports w/ default flags, no notes
- Version - version show on 'yes' support, no links
bug 1077879 - Allow inconsistant instance cache

Add drf-cached-instances=0.2.0, and add setting
DRF_INSTANCE_CACHE_POPULATE_COLD (default on) to control if instance
cache is populated on missing entries.  Turning off will allow for
faster updates but may result in an inconsistant cache.
bug 1077879 - Improve view_feature HTML view

- Whenever support changes between versions, add it to
  meta.compat_table.supports (for example, supported with prefix to
  supported without prefix)
- In meta.compat_table.supports, order features by tree order, not hash
  order
- Add meta.compat_table.footnotes - Important supports with footnotes
- Add notes, footnotes, and prefixes to HTML view
- If support is not "yes", display next to version number
- Plain support "yes" displayed in parens: "(yes)"
bug 1077879 - Add pagination links to feature HTML

Many paginated features (such as /Web/CSS) will include features without
support info.  In these cases, display these features w/ ? for unknown
support.
bug 1077879 - Add JS-enabled HTML generator

/view_feature/<feature_id> will call /api/v1/view_features/<feature_id>
and display the available data.  It resembles the MDN format, but is not
supposed to be identical.
bug 1077879 - Add link to browse app

On the browse detail page /browse/features/<feature_id> , add a
prominent link to the JS-enabled feature view
fix bug 1077879 - Add upload of features.sections

Move features.sections to the writable links section, so that they are
considered significant when tools/upload_data.py looks for changes.
Also used OrderDict when loading the local data collection, so that
translations will be correctly ordered and diffs will be easier to read.