Valid edges at index==0 handled properly (iss #2)
Removed  for profiling
Added test for issue #2 (valid edges at idx==0)
Edges are stored as masked arrays (issue #1)

`crash_kiss` used masked arrays previously, but threw them out when it became
obvious that they wouldn't be useful in the edge finding algorithm itself. They weren't
useful because assignment (i.e. edge[mask_smaller_than_len_edge] = value) completely ignores
the array's own mask.

However, as a result of `get_edge`, masked arrays are useful. A masked array is
easier to work with than, for example, a tuple of (edge, edge_mask).
All sides' backgrounds should always be sampled

For issue #2. We want to make smarter decisions about which sides' backgrounds
are reasonable and which are not based on the median background value for each
side of the image. The `--relative-sides` option should only restrict which
edges we detect as that's the only performance intensive operation. It costs basically
nothing to find the background value of each side.

`Subject` will still only iterate over `Side` objects that are specified in
the `--relative-sides` option,
but `Subject.up.background` will now give a value instead of a `NoneType`
exception.
Merge branch 'smarter-argmax'

Merging in better `np.argmax` edge finding behavior. This branch
was made to allow valid edge indices at index == 0. It reintroduces usage of
`np.ma.MaskedArray` to represent `Side.edge`.

Conflicts:
	crash_kiss/edge.py
Updated tests for smarter-argmax merge