As far as I get it, a pipe always uses the same data type, and just transfers an instances. Why does it only return `Object` on `removeLast`? https://github.com/teetime-framework/TeeTime/blob/94c7703099be8e1ecd3693cf56d41bb2fa2373df/src/main/java/teetime/framework/pipe/IPipe.java#L74 As far as I see it, `T` or `? extends T` should also work.