Derived data ordered evaluation (ready)

* Derived data can now have derived sources.
* Derived data can be added in any order, and the order is calculated from the dependency tree.
* Circular dependency resolution.

Example:
```javascript
{
  id: 'A',
  sources: 'B',
  derivation: function() { ... }
}, {
  id: 'B',
  sources:'C, D',
  derivation: function() { ... }
}, {
  id: 'C',
  sources: 'E',
  derivation: function() { ... }
}, {
  id: 'D',
  sources: '*',
  derivation: function() { ... }
}, {
  id: 'E',
  sources: 'F',
  derivation: function() { ... }
}, {
  id: 'F',
  sources: 'D',
  derivation: function() { ... }
}, {
  id: 'G',
  sources: '*',
  derivation: function() { ... }
}
```

Results in a correct evaluation order of ``'D', 'F', 'E', 'C', 'B', 'A', 'G'``

When circular dependencies are detected, it does not throw an error (best effort). It returns an error string for those sources that cannot be derived.