Add IntercalEdge table

IntercalEdge is essentially a directed graph containing zeropoint
offsets between connected fields of a single bandpass.

Each row is uniquely defined by the bandpass id, and the ids of the
'from' and 'to' catalogs of the overlap. The connections are directed to
indicate the order of the subtraction; delta is 'from - to'.
Add intercal prepare_network

This method finds all overlapping pairs of catalogs for a single
bandpass, and adds each overlap (an edge in a network) to the
IntercalEdge table.
Add intercal.analyze_network

This function computes field-to-field zeropoint differences that get
stored in the IntercalEdge table. The zeropoint differences are computed
as the weighted mean difference of stellar photometry in the
intersection of the overlapping star catalogs.
Solve network of field-to-field zeropoint corrections

We use scipy.optimize.basinhopping to get a global optimim. I've settled
on using Nelder-Mead optimization since it's reliable, but also slow.
The maximum number of function evaluations had to be boosted to allow NM
to converge. Much work can still be done in tuning step size and
annealing temperature.

Most crucial is converting the objective function to cython, though.
Set/unset function for intercal ZP reference metadata
Alembic: add intercal_edge table