Added GPX route file reader and test
added gpx as cmd line option for rte-file formats
fixed fcst file handling for rtefcst in slocum
Initial spot ensemble visualization
Clean up in espot.py

Replacing constants with conventions.py, new conversion in units.py or
arrays without 'units' attribute.
Added box plot
added base64 decoding
Added combined wind/press plot
added save option for charts
Moved spot ensemble plotting to enslib.py, new positional argument "spot-ensemble" in slocum.py
before splitting out gridded ensemble plot
Basics for gridded ensemble in place

* New functions ``make_gridded_ensemble`` and ``plot_gridded_ensemble``
  in enslib.py
* Changed call to xray.decode_cf_datetime in poseidon.subset_time to
  work with xray commit 4713be2
* Small additions/changes to objects, conventions, units
Change ensemble spread calculation

Ensemble spread now calculated as mean of top x (default: 2) ensemble
deviations from gfs forecast.
New spread function and plot clean up

Replace the 'normalized moments' as ensemble spread indicator by a
simple 'mean of top x deltas [gefs - gfs]'.  Also tidy up plotting.
Temp store to test older version
tinylib handles gridded ensemble

* Modified tinylib to pack and unpack the gridded ensemble data provided
  by enslib.make_gridded_ensemble
* Fixed dtype error in packing/unpacking time variable
enslib.plot_gridded_ensemble now checks type of time variable

Packed forecasts will time as int offsets from a reference time whereas
forecasts that have not been packed/unpacked have np.datetime64 times.
enslib.plot_gridded_ensemble now checks the type and converts if
necessary.
Minor clean-up

* Some big fixes in enslib: default for `save_path` argument in
  `plot_spot_ensemble` now `None` rather than `'None'` (can't believe I
  did that...); wind_speed data copied before cobversion to leave
  original units intact.
* In `saildocs`: force *model* to lower case in `parse_spot_request` so
  request with 'send SPOT:GFS:' and 'send SPOT:GEFS:' will be handled
  correctly.
* In `windbreaker.process_query` replaced hard-coded `'ens'` with
  `conv.ENSEMBLE`
Flagged error in poseidon.spot_forecast
small tidy-up