fix up compound aggregations, which really are the opposite

These will usually end up expanding to far more stats, but that's he whole
point of compounds.
add comma-separated list support to /api/name & related
derivative was backwards
add the first (obviously) heuristic function, unrollup()

http://en.wikipedia.org/wiki/Heuristic#Computer_science

This function will likely do awful things on the wrong kind of data, but is necessary
for most operation systems counters. Tools like RRD try really hard to hide rollovers
whereas we keep them intact and act on them at the end of the chain via functions like
this one.
enable heuristics, eval true/false/nil, expand allowed chars in strings

Now if you pass false for a boolean field, it'll actually be false rather than
the string "false". Included nil/null (null becomes nil) for things like compact(null).
I'm not sure why you'd ever want to do that, but it works now, as does "nil" for false.
rework rollup to add new series by default

So a rollup of foo.bar would end up with something like:

{ "uuid" => { "name" => { ts => val, .. }, "name.rollup" => { :sum => n, ... } } }

"replace" will get:

{ "uuid" => { "name" => { :sum => n, ... } } }

"merge" will get:

{ "uuid" => { "name" => { ts => val, ..., :sum => n, ... } } }
fill out compound() functionality

Compound is pretty gross, but the savings in long-term storage are still worth it IMO. This
should pretty much hide all the gross bits except that you likely want to always use ?fun=compound()
when working with them.
add the beginning of a FAQ
add a 'control' hash to the stack for every function

This includes the couple methods that really drove me to do this,
include() and exclude(). Those made all() necessary to clear them
quickly. delete() was added for simply deleting a name-series.

As a bonus, this clears up how to pass state into the whole thing,
such as a cassandra connection and start/end query parameters.

I think I hit all of the places it touches. ... maybe.

Tested with this:

curl -s "http://spaceghost.mtv/api/name/linux.proc.stat/value?fun=cname(rollup(include(linux.proc.stat.cpu1.guest,derivative(compound()))))"

Which gives all /proc/stat values expanded, with a derivative on all of them, then a rollup(cname( only applies to name-series
of linux.proc.stat.cpu1.guest.

This is useful because sometimes you want to fetch a bunch of stats, but only run a derivative on counters, and maybe
integral on others. Without include()/exclude() you'd have to do multiple requests and hit the database twice which
doesn't always make sense.

curl -s "http://spaceghost.mtv/api/name/linux.proc.stat/value?fun=cname(all(rollup(include(linux.proc.stat.cpu1.guest,derivative(compound())))))"

That should resolve cname on all stats, but it's really best to put the cname() in as deep as possible if you're going to use include()/exclude()/all().
[retrieval] add an interim handler for /api/node/hostname

Does lookups on anything in the uuid list that doesn't look like a uuid and replaces
it with a uuid in the list.

If anybody really hates this, I can remove it. For now, it makes integration of
existing tools much, much easier.
Fix bugs & gaps found while getting Cubism working.
hostname() never worked, make it work
Add format() function to replace all formats, add array format.
move uuid resolution from query_hastur to a helper method
add range checking to slice()