Get everything failing for a reason

* Raise RuntimeErrors with suggestions so we can see what
  class of problem breaks what in specs
* Gives us something to fix. Ignoring features right now,
  concentrating on specs
* Uses a rescue PG::InFailedSqlTransaction to rescue and rollback in
  organisations import. At commit time this prevented exhaustion
  of the connection pool in the presence of so many exceptions. However,
  we can't reproduce this now. The exception handler may be a dangerous
  cargo cult, or it may be valuable knowledge. It does less harm to
  leave it in for now such that we can use it again if the problem
  of exhausted connection pools reoccurs.
Postgres: fix organisation sites scope

* Can't alias the COUNT in the HAVING
* ONE, ah ha ha
* TWO, ah ha ha
Fix hits update

* Add upsert support that was missing from the spike
Fix the import of DailyHitTotal

* Split upsert into two queries
* Be specific about the behaviour the specs are testing
Fix sort by hits

* Postgres requires NULLS LAST on an ORDER DESC, apparently
* We can get away with the GROUP BY primary key trick for the rest
Fix HitsMappingsRelations import

* Straight mySQL -> postgreSQL swap
* INSERT IGNORE simulation and ANSI update style
Fix lack of type conversions

* A couple of dynamic columns used for counts on model scopes
  (usually SUM(something) as attr_name) were coming back as strings
  see https://groups.google.com/forum/#!topic/ruby-pg/egzlYNi2OKk)
* Lay a method on top of the attribute to do the conversion on the fly
* Better suggestions welcomed!
Fix mappings from host paths

* We really need the GROUP BY, and the way we tell Postgres that
  the path is effectively represented by the hash is to use MIN
  as the aggregate. We can no longer use #pluck as this will affect the
  SELECTed field, but we can get the same behaviour by simple #map.
Fix hit scope groupings

* Fall back on MIN for path_hash, mapping_id and host_id when grouping hits
Postgres adapter backport

* From ActiveRecord 4.0
* Has path to allow hash of variables
* Allows increase in work_mem - vital for HashAggregate to be used instead of slower GroupAggregate
Widen hits and hits_staging path column

* Would fall over on odd too-long rows from hits
Turn off quoting

* CDN files occasionally have unmatched quotes in the path
* Postgres doesn't allow disabling quoting when treating a file
  as CSV just to skip the header, so pretend the quote is an
  unprintable (E'\b' == backspace)
Use async commits

* Speeds up smaller transactions
* Returns before write-ahead log is persisted to disk
* Gives up the D (durability) in ACID - could result in data loss if the
  server crashed, but in the case of hits this would almost
  immediately be re-imported and in the case of bulk mapping
  adds would be repeatable.
Remove unnecessary MINs
Don't JOIN on a function loading hits

* Computed functions can't work against an index
Don't update hits_mappings_relations

* (that haven't changed)
Fix order-dependent test
Fix precompute_mapping_hit_counts for Postgres
Re-fix hits/mapping relations

* We'd changed the behaviour with the <>
* We need IS DISTINCT FROM to avoid three-valued logic
Optimise Import::HitsMappingsRelations

* Eschew path_hash join in favour of path
* precompute_mappings! only updates what's changed