Adds a protocol and records for subscriptions and their registries. Pubsub registries are a Service. Subscriptions come in two flavors: persistent and transient. Transient subscriptions, like those used in streams, are wiped when the config is reloaded. Persistent subscriptions, like the ones used by servers, survive the sweeping process. Since the core now considers pubsub registries equivalent during transition!, the same registry will be used across reloads. This means the dash can continue to receive updates for queries against an index, even through reloads. Closes #88.
Also, it actually works when services aren't yet started. Some awkward macro magic and brittle code involved, but it does handle the common case OK. Closes #159, sort of.
Service is now split into Service and ServiceEquiv. You can create a Service which, when started, invokes a function to create an ExecutorService. This Service acts as an Executor itself, so you can execute any function on that service. It also knows enough about common executors and queues to tell when two of these services are equivalent. riemann.config's add-service! is now just service!. service! may optionally re-use an existing service from the current core. service! now returns the service it chooses, so you can bind it to a variable and use it within the config. This makes it possible to create executor services in the config, bind them to variables, and use them to schedule IO-bound functions for asynchronous execution.
Not sure why I made this choice in the first place, but I'm pretty sure I was crazy to do it. Removes the need for config file validation, simplifies error handling. Closes #114.
Most folds now come in a friendly (sum) and a strict (sum*) variety, intended to do sane, informative, correct things under common circumstances like being asked to reduce nil events or events with nil metrics. Should close #157, I believe. May do some fine-tuning before release.