Add explicit support for running in fat jar mode (#210)

 The Gradle support now includes a naive fat jar task (merges jar, no collision handling) and a convenience task to run the fat jar.

 There is a performance penalty when running in fat jar mode in that file system reads are more expensive in that they are decompressed on the fly and serving static assets requires an in memory copy (whereas exploded deployment can leverage zero copy). There should be no other functional difference, due to the pervasive use of the Path type instead of File.