Introduce a TopologicalHash class

In the interest of `depends_on :cask`, we introduce a topologically
sortable hashmap, implemented as a small subclass of Hash.
Add exception for cyclic Cask dependencies
Implement Cask dependencies

as a class concerned with recursively loading, graphing and sorting all
dependencies of a given Cask.
Satisfy Cask dependencies on install

Includes an unsavory hack to bypass redundant checks for Cask
subdependencies, in the form of an optional argument passed down from
`install` to `satisfy_dependencies`.
Add tests for depends_on :cask
Merge pull request #8491 from ndr-qef/core/depends_on-casks

Implement `depends_on :cask`