Restructured oscillation stage

The oscillation stage has been restructured in a way that there is an OscillationServiceBase class that handles the generation of the dictionaries and the oversampling. 
For a given oscillation code, for now prob3 and NuCraft, there is a derived class. This class overloads the __init__ method to also store any further information the oscillation code needs (i.e. Earth model) and implements the fill_osc_prob method that does the actual calculation.
For the precomputed oscillation tables, the fill_osc_probs method is skipped (since we don't want to calculate new probabilities), and the get_osc_probLT_dict method (that returns the oversampled oscillation maps) is replaced to directly hand over the precomputed probabilites.

Also, there is now the OscillationProbs.py script that just calculates bare oscillation probabilities (in contrast to Oscillation.py, which calculates the flux after oscillation from some input flux). A copy of the most recent NuCraft trunk (http://nucraft.hepforge.org/svn/trunk/ at rev18) was added since there is no possibility to just link a svn repo into github.

Furthermore, there are a number of utils added, mostly related to rebinning/downsampling the maps.

Finally, the NuCraft module and the OscillationProbs.py script were added to setup.py. I hope this is enough to make distutils work properly...

And that's it! Sorry that this is such a big pull request... 
Why not just
```
isbar = '_bar' if 'bar' in nu else ''
osc_prob_dict[nu] = {'nue'+isbar: np.zeros(shape,dtype=np.float32),
                                  'numu''+isbar: np.zeros(shape,dtype=np.float32), ...
```