Families of operators have common interfaces

I'm working to add spatial functionality to Pig (it's in [my fork of datafu](https://github.com/mrflip/datafu/tree/esri_fiddle/datafu-pig/src/main/java/datafu/pig/geo) at the moment, still figuring out where it should go). The idiomatic way to write eg. the Union, Intersect, etc UDFs is to take a string constructor arg and create the operator at birth. This means I only have to write one UDF per signature.

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.