Hits and mappings, together at last

* Hits may now belong to a mapping
* Establish three-step update for this belongs_to using new table/model SitePath/site_paths:
  * site_paths are created from hits (pure SQL)
    (site_paths is the smallest set of paths for a site that we can operate against)
  * site_paths' mapping IDs are created by ActiveRecord batch on c14n'd path
  * Hits' mapping IDs are refreshed from site_paths (pure SQL)
* Steps can fail independently (not transactionally) as they're idempotent
* Current assumption that mappings source paths are immutable (though
  we may need to change SitePath.where(mapping_id: nil) to acknowledge editing, this
  will slow things down)
Show mapping-sensitive info on the hits page

* Hide errors that now have a mapping
* Indicate in muted-text what a hit was and what the mapping says now
* Text of "Check mapping" changes to Add Mapping / Edit Mapping as appropriate
Backport ActiveRecord::Base#update_columns

* from ActiveRecord 4.x
* Supports quick, validation-free update of more than one column
  in a single UPDATE
Make HitsMappingsRelations#refresh! store c14n'd paths

* This enables us to update hits when mappings change
Fix HitsMappingsRelations so hits get mappings for the right site

* This is really slow, and we're about to fix it by making site_paths go away
Make HitsRelationsMappings.refresh! "fast"*

* Not run until heat death of universe
* Simplifies by linking hits to host_paths, not site_paths
  (109K rows vs 105K at time of writing, which seems slightly larger but means we don't have to ask
   mySQL to handle something it couldn't)
HitsMappingRelations.refresh! should cope with c14n'd query string
Eradicate last trace of site_path
Mappings update their hits on save

* Also unlink old hits when path changes
Import of either new hits or mappings should refresh relations
Refresh operations to $stderr, not logger.info

* Otherwise it doesn't look like anything is happening for minutes
Do linked hits updates in batch

* There may be many, and #find will be slow
HostPath comment

* HostPath is more or less our URL set, though can't reasonably be called that because
  although we could construct a complete URL set from this, it doesn't by itself have
  the component parts of a URL.