Lockfile tracks the time span of each isoc group

This dt time span is is used for star formation rate calculations.

`Lockfile.lock_box` and `_include_unlocked_isochrones` both fill
in the dt values for their isochrone groups.

The `_estimate_age_grid` method is able to estimate the
age grid of the isochrone set and automatically use it for
estimating the time span over each isochrone.

Finally, also add Lockfile.group_dt() method. The group_dt method returns
a vector of time spans (in years) indicating the duration of each
isochrone group. This can be used for computing star formation histories.
Create a star formation history table with SFH

The `SFH.solution_table` method uses the guidance of StarFISH's
sfh.sm script to convert the star formation history output
to units of solar masses per year.
Synth clears existing synthetic CMDs before running
LibraryBuilder._check_lib_isochrone works with NaN and nan now
Synth: ensure plot directory exists
Mask: CMD indices start at 1
Add Lockfile.lock_grid method

The `lock_grid` method produces a lockfile from a user's age grid
and metallicity listing. All quantities for each lock group are
computed automatically.
Lockfile is fixed width now
Fix how active isochrone groups are counted

Lockfile exposes the `active_groups` property to make a list
of all isochrone groups processed by synth.

Synth itself provides `n_active_groups`, which counts the number
of active groups.
Synth hess plot uses groups rather than isochrones
Lockfile index records mean group age and Z
Lockfile cmdfile and holdfile use mean bin age/Z
Fix lock_grid binning

There was an error in the way that `lock_grid` was using
indices from `numpy.digitize`. That should be solved now.

`lock_grid` also warns if metallicity group does not exist,
and skips it.
Synth does better at preping directory

Synth will now ensure that the `synth_dir` exists before
running `synth`. It also emits a warning when cleaning old
synthetic CMDs.
Lockfile ensures that isochrones are in groups

Now Lockfile only includes isochrones in the lockfile that
are explicitly placed in groups. Before ungrouped isochrones
appeared, which of course crashed `synth`. This is relevant
for cases where not all isochrones are included in the output
synthetic CMDs.
Lockfile writes a new isofile with used isochrones

When the lockfile uses fewer than the total pool of isochrones
to build groups, the lockfile no longer matches the isofile given
to `mklib`. Thus the lockfile now writes an 'edited' isofile
with just the used isochrones. This is done at the same time
as the lockfile is written.

- Small refactoring in `LibraryBuilder`
- New interface for `Lockfile`; a `LibraryBuilder` is now an
  argument for `__init__`.
Lockfile orders isochrones by group

The `Lockfile._isoc_sel` list provides the ordering of isochrones by
group, and contains indices of only the isochrones needed for the
groups. This index is also used for the isofile input for synth.
LibraryBuilder.write_edited_isochrone starts with written isofile