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.

Re-commit of https://github.com/BuildCraft/BuildCraft/pull/905 for mc16