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 :(
No, throwable is a Java class, and `null` is a valid value for cause (indicates there is no cause). That said, throwable actually has a bit of a funny hack where it starts with cause initialised to `this`, as a hacky way of indicating that cause has "not been initialized yet". The code inside throwable treats both `null` and `this` as special cases.