Extending service dependencies to allow finer grain control.
Instead of a single dependsOn field, there are fields for
provides, conflicts, install, and runtime. Within install and
runtime are 'requires' and 'uses' fields. The 'requires' list
in the runtime section is exactly the same as what dependsOn
used to be. Requires indicates the required service must be
also be on the cluster as well as enforcing task order.
Uses enforces the same task order as requires, but will not force
the service being 'used' to be placed on the cluster. For example,
datanode uses kerberos means datanode must be started after
kerberos, but only if kerberos exists on the cluster. Runtime
dependencies apply to initialize, start, and stop actions. Install
dependencies apply to the install action.

Also introduced the concept of conflicts, which prevents services
that conflict from being on the same cluster. Also introduced
provides, which allows a service like 'app-1.0' to provide the
'app' service, so that 'app-1.0' can satisfy dependencies on 'app'.

As part of this effort, refactored most of the dependency logic
into ServiceDependencyResolver.
removing unused code.
adding more comments, forcing Actions to be a singleton and
better error messaging in the case of conflicting services.
Update to use resources from the latest version of the hadoop cookbook and clean up ruby syntax (via rubocop)
Merge pull request #87 from continuuity/feature/extend-dependencies

Feature/extend dependencies
Header update
missed a couple changes after merge.
Merge pull request #98 from continuuity/feature/service-dependencies-integration-fix

missed a couple changes after merge.
Merge pull request #97 from continuuity/feature/update-hadoop-wrapper

Feature/update hadoop wrapper
Adding services for kerberos-client and kerberos-master and adding a template for creating a singlenode KDC/kadmind server
Merge branch 'develop' into feature/krb-import