#552 Detector non-linearity and reciprocity failure

A basic method to apply any desired non-linearity on an Image has been included to begin with. The non-linearity can be specified by a LookupTable or as a function, possibly with parameters, that can act on NumPy arrays. In addition, it also includes a feature to correct for reciprocity failure. A basic unit test to test these functionalities have also been built.
This is a bit confusing.  Normally args refer to a list that should be unpacked when passed to the function.  So I would have expected the function to be called with `f(x,*args)`.  If you want the current behavior, you should probably call this parameter just `arg` and say that the function is only allowed to have a single argument, which may be a list.

However, my suggestion would be to say that any parameters passed to `applyNonlinearity` after the first parameter will be passed on as an argument to that function.

So the declaration would be
```
def applyNonlinearity(self, NLfunc, *args):
```
and the call would not need the `if args != None` switch.  It would just be
```
img_nl = NLfunc(self.array, *args)
```
I think this would be a cleaner, more flexible API.