pyr/cyanite — pull request #80 by pyr (2014-11-17 15:06:30+00:00)
Title: updated core

I'll use this PR as an explanation for this bulky set of changes.

First of all, this is the first step in moving out of the "Proof of Concept" phase for cyanite.
The initial draft for it was put together in a short afternoon which led to a few corners being cut.

The current code breaks down the architecture around the following concepts:

- *transports*: which represent metric input methods
- *indices*: provide ways to store and lookup metric path names
- *stores*: provide ways to store metrics

In addition to this, two new structural namespaces help simplify the code in transports, indices and stores:

- `io.cyanite.precision`: provides helpful methods for representing metric resolution and fetch specifications
- `engine`: binds together transports, an index and a store

`store.clj` and `index.clj` now implement the logic for manipulating data without requiring the implementations of the `Store` or `Index` protocol to
do it, this results in a simplified contract to be realized by underlying stores (a single signature for `Store`, two signatures for `Index`).

The net result of this work is that writing stores, indices or transports is now much simpler and relieves implementations of dealing with
the channel logic which now happens in `engine.clj`, the goal there is to gradually move to transducers to provide channel manipulation since
cyanite is built against clojure 1.7.

Last, an atom-store is now provided which will help building integration tests.