Add a concat setting function to determine how to combine inputs

As discussed in issue #2.

This tries to preserve path handling.  In particular, it only uses the relative part of input paths, under appDir (which is really the same as buildDir).  As a result, the concat setting could instead be `Seq[String] => (Seq[String], String)` for simplicity, but I suppose the user may want to get to the file contents as well.
The default behavior is unchanged (except for a tweak to where ".min" is added for files without a ".").  I've tested it in the default case and the everything-to-one case and incremental building still seems to work.
`OpInputHasher[UglifyOps]`