`ActionBuilder` is what actually builds an `EssentialAction`.  It combines a body parser with a request header to produce a `Request`, then transforms that `Request` to some other type `R`, and then invokes the the action itself with `R` as the argument.

`ActionFunction` is a generalisation of "transforms that `Request` to some other type `R`".  It knows nothing of body parsers or `EssentialAction`, or what options exist to build the action (eg, the various forms of `apply` and `async` that `ActionBuilder` provides).  It just knows how to transform the request and consequently invoke the action.  In addition, it includes the `andThen` for composing.

`ActionBuilder` is needed as the base for building all actions, and then other `ActionFunction`'s can be composed with it.