[bug 1107809] Fix Gengo language guesser

On Thursday, Gengo did a massive API update and in the process the
unofficial language guesser API endpoint we were using disappeared.

This updates the url to the correct url, tweaks the code to handle the
new response shape and switches us to use HTTPS.
Merge pull request #402 from willkg/1107809-fix-guesser

[bug 1107809] Fix Gengo language guesser
[bug 1107803] Rewrite Response inference code

Pretty sure there were some edge cases where we wouldn't infer data that
was appropriate to infer. This reworks the code to read better so it's
easier to reason about all the possible cases including the ones we
weren't handling well before.

I also nixed the code that sets the channel. It's not really appropriate
to assume everything is "stable" if no value is provided. Not sure why I
thought that was a hawt idea before.
Merge pull request #403 from willkg/1107803-versions

[bug 1107803] Rewrite Response inference code
[bug 1108604] Tweak paging links in hb data view

* change older/newer -> prev/next
* add first and last links
* moved code to a macro
[bug 1108604] Add sort and display ts better in hb data view

* add sortby id and sortby updated_ts
* fix the display of timestamps so it's readable
[bug 1108604] Change paging to 100 in hb data view
[bug 1107083] Backfill versions

This has a data migration that backfills the version value where the
following are all true:

1. version == ''
2. product and user_agent are non-empty strings
3. product == inferred product from user_agent

If all those are true, then we copy browser_version to version.
Merge pull request #404 from willkg/1107083-version-backfill

[bug 1107083] Backfill versions
[bug 1105512] Rip out old generic form

* rip out the old generic form html, js, css and view code
* remove the "unknown product" page which stunk and we don't need now
  that we have a picker
* rework a bunch of tests so the url includes the product otherwise they
  do a request and get the picker instead of the feedback form they're
  testing
* remove all the generic_feedback_form_dev related html, css, js,
  bundles and smoketests
Update grappelli in requirements.txt file
Merge pull request #405 from willkg/1105512-remove-old-form

[bug 1105512] Rip out old generic form
[bug 1104934] Add ResponseTroubleshootingInfo model

* add model
* add code to purge_data to purge data older than 6 months
* update data retention policy documentation
Merge pull request #406 from willkg/1104934-support-api-models

[bug 1104934] Add ResponseTroubleshootingInfo model
[bug 950913] Move 'TRUNCATE_LENGTH' and make accessable to other files
[bug 1074315] Ignore deleted files for linting in pre-commit hook

Use mythmon's fix for this issue in kitsune repository from
https://github.com/mozilla/kitsune/pull/2252
Merge pull request #408 from lgp171188/1074315

Fix bug "1074315 -  fix bin/flake8_lint.sh script to not try to lint files that don't exist"
Get list of .py files to lint using just git diff
Merge pull request #409 from lgp171188/improve-getting-list-of-py-files-for-lint

Get list of .py files to lint using just git diff
[bug 950913] Access TRUNCATE_LENGTH from generic_feedback template