Converted generic Function parameters to individual interfaces
extending Function.  I didn't really want to do this, but type erasure
means I can't have overloads of methods like map(Function) with
differing generic types (and no other difference).