Families of operators have common interfaces

I'm working to add spatial functionality to Pig (it's in my fork of datafu at the moment, figuring out where it should go). The idiomatic way to write eg. the Union, Intersect, etc UDFs is to take a constructor arg specifying the operator and choose it at birth. 

The first commit in this pull req gives a type-safe way to call the `.execute()` method on a generic `(geom, geom) -> geom` operator. This adds an interface IOperatorAWithB, and has Union, Intersect, SymmetricDifference and Difference implement.

The second commit has a bag of minor fixes:

* .gitignore ignores the `target/` directory of build artifacts
* made the NumberUtils class public, along with the `.snap` methods, so that they can be applied from code using the library.
* There are many places which throw exceptions having no error message, which is just hell to debug when it's happening on a remote worker. As I've been experiencing bugs I've been inserting messages.