Type safe return values when using pipelines

In response to;

>  Unfortunately this only provides RUNTIME exceptions if you get the type parameters  wrong (either the number or number of them). Will try an will out how to make this a compile time problem (pull requests welcome)." - as a side this is also true of the jedis to scala conversions

I have changed the pipeline syncAndReturn to return a tuple and used implicit conversions on a pipeline wrapper to convert to the correct scala types. This enables compile time type checking of both the returned objects and the internal jedis to scala conversions. Also have conveniance methods for each tuple arity to allow for more options when inferring type.

There is a little more to do like go through and update the method return types to Option for ones that can return null and probably add a few additional test; but wanted to get some feedback before going much further.

Also as a second pull request would be simple to extend this to transactions.