CDK-347. Implement DatasetTarget#handleExisting and WriteMode support.

I'm not sure looking for data is really the right approach either.  This goes back to the same discussion Ryan and I had directly with regard to signalReady() for empty views.  Sometimes jobs (such as the filtering type) produce empty datasets as output.  If another job can come in and write data to the same destination without specifying a mode of APPEND or OVERWRITE that is going to be a surprising result.

Likewise, you don't want to have a race condition where two jobs can unknowingly write to the same target.

The default behavior in Crunch and MapReduce handles this problem by creating the directory upfront.  If the directory exists, the job fails because some other writer is writing to it or has written to it.

Writing to views is sort of awkward in that views and directories are fundamentally different things.  It seems the best thing you can do with views is the same sort of thing we were talking about doing with signalReady() where you track that a specific view has been signaled (or in this case written to).  Then, you require overwrite or append if another writer tries to write to the same exact view.  The thing that is of course quite strange though is that another writer can overwrite or append to the the view (without specifying overwrite or append mode) by specifying a different view that overlaps with the previously written view.