allow IPipe to be used in a much wider set of situations

In many places (eg triggers) a full Pipe object is needed to be passed.
This means that you can not use an IPipeTile in many cases, because you can only get an IPipe from it. 

Adding in these functions means that a cleaner api interface/ code-base split can be achieved, with virtually all pipe types being able to drop their use of the concrete TileGenericPipe.(Pipe)pipe for use of the API IPipeTile.(IPipe)getPipe().

This PR does not break old mods using the new version, as it only adds functions.

In the long run this makes writing sub-mods for BC easier, as direct use of core BC classes can be avoided, leading to a larger immunity to BC coding refactors breaking sub-mods. I have no profiling data, but java should inline the trivial,and non-overridden, functions resulting in no performance hit from this change unless someone does something silly like override it themselves.

the x/y/z coord updates are needed as they are currently used by BlockGenericPipe, GateVanilla, ITriggerPipe.isTriggerActive, and various GUI related network code.

Most of those types of actions (triggers, gui) would be performed by mods also, so having access to the pipes coordinates via an API would be useful.