Add ActionFunction.compose to be consistent with Function1

As suggested by @huntc