Contours

Hi Sam,


Here is a pull request for the work on implementing the contours.

I spent some time thinking about contours.
Two things came out:

1) Conceptually a contour always has a parameter, and a value:
       c(lambda), where: (c, lambda)= e.g.  (r, theta), (y, x) , (x, y) (....)
       then ratio becomes c(point)/c(lambda(point))
In the code I call 'lambda' 'par' and 'c' 'contour_value' .
I made function that looks up the contour_value for a given par.

2) I realised that we need to think about how the contour interpolates (so far linear), and extrapolates

As you will see, the "c(lambda)" function (get_contour_value(......)) deals with both extrapolation on the both extreme ends, and with interpolation. Interpolation was previously done within the ratio functions, but I took it out of there. 
You will also notice that I implemented a log option, only in the case where the parameter is 'x' (which is useful for Xenon100), and I thought it doesn't make sense to mix both polar coordinates and log axes.

Then there are some minor changes to PointAnalyser/Analyse.py, where the chi2 function now takes a dictionary of constraints, and the predictions. I think in makes sense to do in this way, so that the initialisation of the constraints list is taken out of the chi2 function.


Let me know your thoughts.

I'm tempted to now start implementing multinest and/or an mcmc code, so that we can start doing some scans. 

Best,
Kees