sorted out full/partial evaluation of gradient, tensor, dtensor in model()

Now, the user can call model() with any combination of single (only a gradient, only a tensor, etc..) and multiple (functions returning tuples (likelihood, gradient), (likelihood, gradient, tensor), etc..) functions; provided that when a tensor (resp. dtensor) is given there is also a gradient (resp. tensor) function too.

All current tests pass.

Note to self : tests should be updated to verify all combinations