Make "out" parameter required for some functions

Previously, all Functions had the "out" parameter marked optional,
meaning that if a null output was passed to compute, each Function
implementation was independently responsible for handling it.

The OutputFunction hierarchy developed as a way to ease that problem:
you could define a handy createOutput method that knew how to create the
output from the input, if the provided output was null.

But non-OutputFunction implementations fell by the wayside: the vast
majority of them did not check for null output, but rather simply failed
with NPE when a null output was given.

This change makes such functions extend a new layer of the class
hierarchy called AbstractStrictFunction, which casts the "out" parameter
as required. In this way, the framework will no longer match them to
input parameters when an output is not explicitly provided.

Henceforth, _all_ functions that want to have an optional "out" should
extend AbstractOutputFunction, whereas all those that want to require
"out" should extend AbstractStrictFunction.

Technically, there is one other extension of AbstractFunction:
AbstractInplaceFunction. This flavor collapses the "in" and "out"
parameters to a single "arg" which is both the input and the output --
and is required to be specified, of course.