veloview: first attempt at GRFIO (not working)

Flattening of dictionaries work, but filling the tree doesn't.  I'm
having problems iterating over the keys and filling the appropriate
branches.

My understanding is:

  tree.keyname[timestamp]	# spəcific timestamp
  tree.keyname			# last timestamp

should give me access to the object.  So for writing, I tried this in a
loop:

  getattr(tree, key)[timestamp] = value

But that fails.  I guess the reason is because there are no entries yet
in the branch.  I should use setattr(..) then, but not sure how I can
pass the timestamp key to setattr.
veloview: Makefile target to run test_core_io

Needs special LD_LIBRARY_PATH fiddling
Use a patched version of rq to fix job data bug.

There was an intermittent problem of jobs changing their status to
complete before the job’s output was saved to the Job instance.

This commit uses a fork of mine with a cherry-picked commit from the rq
master branch that fixes this problem applied to v0.4.6.

When v0.4.7 or later arrives, we should check the fix is still present
and update back to tagged rq releases.
Add nginx to the Vagrant development instance for gzip compression.

This provides savings in JSON response size of up to 92%, as well as
further savings in static resources like CSS and JS files.
Change nginx sendfile param to off.

Fixes problem with serving modified files in a VirtualBox shared folder.
https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
Add run selector.

Run view URLs are now structured like

    /run_view/<run_number>/<page>/<sensor>
Typos.
Add stats boxes to plots and use more colour.

Use colour in multi-plots to hint what label belongs to what plotable.
Forgot to include TProfile.
Switch from Gunicorn to uWSGI.

This is largely because of the sendfile problem (see commit 81e906).
Move page config dict into veloview, simplify plotting methods.
veloview.core.io: writing to trees work

No need to specify timestamp, puts now as default; and there should not
be a reason to put any other (unless you want to rewrite history).
Merge branch 'master' into cron

* master: (2 commits)
  add runList utility
  ...
Whitespace changes
runlock: Use DotLock from libVeloGUIUtils to lock
runlock: add timeout (default 3 secs)
runlock: Less verbose messages
runlock test: bug fix test
runlock test: boilerplate for DotLock
Merge branch 'master' into cron

* master:
  Move runList to new location of GiantRootFileIO