Add method to extract groups

The method returns the groups over which the experiment is run, like the
models, the distortion parameters, SNR, etc., so that we can do some
processing (averages) across conditions. It ignores columns like values
and intelligibility.

It's probably too complex and could be simplified. It could also be
taken out of the Experiment class. The way it is now, it's expected that
we know the experiment class when we analysis results.
Fix #16 Optimize obs on average intelligibility

The ideal observer now Optimizes the _average intelligibility_ against
the target intelligibility, rather than optimizing each sentence against
the target. I think this makes more sense, because we're optimizing
against an *average* intelligibility.
Fix #17: Remove bandwidth compensation constant

When finding the bands above threshold in the sEPSM, there is a factor
of 0.231 for the compensation of the filter bandwidth. This factor is
unnecessary because the diffuse hearing threshold used for the
comparison are already adjusted for the filter bandwidths.

The tests tolerance had to be adjusted; for the spectral subtraction case,
the relative difference compared to the Matlab code is smaller than 8%. In
the condition with speech-shaped noise only, the difference is smaller than 0
.1%.
Return np.nan instead of None when SRT not found

This is actually so that things work better in pandas when doing
operations on dataframes. Pandas uses nan everywhere to signify when
data are missing.

None created issues when doing averages or grouping.

I had to edit the test to test for isnan.
Fix sign for setting levels in Material

The compensation for the reference level was using the wrong sign. It's
negative, instead of positive.
Add average_level to Material

It's a convenience function to calculate the average level of a whole
speech material. The average value can be used to set the reference
level of the speech material.