Almost pushed all abstract function declarations
into AbstractFunction
AbstractFunction defined using Function<F,T>, tests do work