add a few things you might want to know about an IPipe

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()