Add tributary logic to maestro

1) extended tributary logic by avoiding copying duplicate files
2) refactored tributary logic so it is an Hdfs action
3) fixed tributary logic so that archive directory structure mimics HDFS source structure
4) changed tributary tests so they each run in an isolated directory
5) date parsing does not allow overflowed days and months
6) many other misc changes to tributary logic

Sorry about the size of the pull request :(
AFAICT there are a lot of implicit conventions being made in the existing tributary API. I left all those conventions intact, with the minimum changes required to get the archive dir structure right. On second thoughts, that was probably a mistake. People will need to change their code anyway to use the maestro methods, so it's probably the right time to create a more rigorous flow method that establishes the conventions we desire by construction.

`hdfsLandingDir` should be equivalent to `hdfsSourceDir/destSubDir`. If you use the old API with `hdfsLandingDir`, we find the source dir and use it to split `hdfsLandingDir` into `hdfsSourceDir` and `destSubDir`. It is, of course, better to directly specify `hdfsSourceDir` and `destSubDir` in the first place.