compose2 + optimized compose

Updated `compose` to a new implementation as described in
CrossEye#53
with an additional fix so that `compose2` accepts multiple arguments.