Elasticsearch

NOTE: Clustering is done automatically by elasticsearch (using zen discovery) as it is not possible to reconfigure zen discovery at runtime. As a future improvement, cross-cloud support could be added using tribes
I might swap the parameter orders though. It ends up doing `String.format(" -D%s=%s", parameter, config)`, so passing parameter before config makes sense. And having `ConfigKey` next to `defaultValue` also makes sense. e.g. 

    appendConfigIfPresent(commandBuilder, "es.path.data", ElasticSearchNode.DATA_DIR, Os.mergePaths(getRunDir(), "data"));