Initial FILTEREDRANGESCAN operation

Added FILTEREDRANGESCAN as an operation to a JSON request. Currently
it just does a regular row read, it's a place holder to start working on
the new read path.

`examples/json/filtered_range_scan.sh` is a demo script to make a
call to read with the same data.

To load the sample data create the schema using cassandra-cli  and the
contents of `test-data/cassandra-schema.txt` on a standard 1.2.X node.
The data in `test-data/cassandra-splunk.csv` can be loaded onto the local
node using `test-data/load-test.py`. Then stop the node and start intravert
with it configured to use the same data files, see
`$SRC/src/resources/cassandra.yaml`.

Example output below:

    $ json/filtered_range_scan.sh
    Querying 'myks' and column family 'mycf'
    * About to connect() to localhost port 8080 (#0)
    *   Trying ::1...
    * connected
    * Connected to localhost (::1) port 8080 (#0)
    > POST /intravert/intrareq-json HTTP/1.1
    > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
    > Host: localhost:8080
    > Accept: */*
    > Content-Length: 230
    > Content-Type: application/x-www-form-urlencoded
    >
    * upload completely sent off: 230 out of 230 bytes
    < HTTP/1.1 200 OK
    < content-length: 494
    <
    * Connection #0 to host localhost left intact
    {"opsRes":{"0":"OK","1":"OK","2":[{"key":"1368147231:aarons-MBP-2011.local:cassandra","cols":[{"name":"raw","value":" INFO [CompactionExecutor:7] 2013-05-10 12:53:51,673 CompactionTask.java (line 262) Compacted 4 sstables to [/var/lib/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ib-5,].  6,491 bytes to 5,124 (~78% of original) in 31ms = 0.157633MB/s.  5 total rows, 4 unique.  Row merge counts were {1:3, 2:1, 3:0, 4:0, }"}]}]},"exception":null,"exceptionId":null}* Closing connection #0
Initial row level filtering.

Proof of concept to get row level filtering in place. It's **very**
messy, I was focused on the how not how pretty :)

FilteredRangeScanHandler handles the HTTP request and creates a (splunk)
FilteredRangeSliceCommand. This command is passed to the SplunkStorageProxy
which processes it just like a RangeSliceCommand. Messages about the
command are delivered to the FilteredRangeSliceVerbHandler which processes
the call and returns a result for the SplunkStoreProxy to return to the
http handler.

The FilteredRangeSliceVerbHandler contains a lot of junk that I copied from
other parts of the C* code. Comments in the file describe where they are
from. The SSTableFilteredScanner does the actual low level filtering of rows,
for now it only includes rows that have an even timestamp.

This code relies on a fork of cassandra located at
https://github.com/amorton/cassandra/tree/splunk

To use the fork I made these changes to the intravert pom.xml to
point to my JAR and pull in the cassandra dependencies:

    <dependency>
        <groupId>com.splunk.cassandra</groupId>
        <artifactId>apache-cassandra</artifactId>
        <version>1.2.5-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>/Users/aaron/code/apache/cassandra/build/apache-cassandra-1.2.5-SNAPSHOT.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>com.splunk.cassandra</groupId>
        <artifactId>apache-cassandra-thrift</artifactId>
        <version>1.2.5-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>/Users/aaron/code/apache/cassandra/build/apache-cassandra-thrift-1.2.5-SNAPSHOT.jar</systemPath>
    </dependency>
	<dependency>
		<groupId>org.apache.cassandra</groupId>
		<artifactId>cassandra-all</artifactId>
		<version>1.2.3</version>
        <type>pom</type>
	</dependency>
Was not creating milliscond time stamps
Improved filter criteria & code tidy

Now supports start and stop times, inclusive and exclusive lists for the
hosts and app names. Start and stop times are inclusive and you can only
provide either an inclusive or exclusive list for each of the host and
application filters.

*Note:* Need to change the time component of the key to a timeuuid. I was
lazy in using a microsecond timestamp.

Still does not do smart things with token ranges, i.e.
the search is over the entire data set. We know the first and last *key*
(not token) for each SSTable so if we know the time range we can limit the
number of sstables we read from.

Code tidy to pass the arguments into the SSTableFilteredScanner and a
memtable iterator that also does the filtering.

Next step is to add unit tests.

Current example query:

    curl -vX POST http://localhost:8080/intravert/intrareq-json -d "{\"e\":[ {\"type\":\"SETKEYSPACE\",\"op\":{\"keyspace\":\"splunk\"}}, {\"type\":\"CONSISTENCY\",\"op\":{\"level\":\"QUORUM\"}}, {\"type\":\"FILTEREDRANGESCAN\",\"op\":{\"columnFamily\" : \"splunk\", \"startTime\" : \"1368147160974\", \"endTime\" : \"1368147160995\", \"includeHosts\" : [], \"excludeHosts\" : [], \"includeApplications\" : [], \"excludeApplications\" : [] }}]}"

Returns 4 from a possible 78 rows:

    aarons-MBP-2011:examples aaron$ json/filtered_range_scan.sh
    Querying 'myks' and column family 'mycf'
    * About to connect() to localhost port 8080 (#0)
    *   Trying ::1...
    * connected
    * Connected to localhost (::1) port 8080 (#0)
    > POST /intravert/intrareq-json HTTP/1.1
    > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
    > Host: localhost:8080
    > Accept: */*
    > Content-Length: 328
    > Content-Type: application/x-www-form-urlencoded
    >
    * upload completely sent off: 328 out of 328 bytes
    < HTTP/1.1 200 OK
    < content-length: 2026
    <
    * Connection #0 to host localhost left intact
    {"opsRes":{"0":"OK","1":"OK","2":[{"key":"1368147160975:aarons-MBP-2011.local:cassandra","cols":[{"name":"raw","value":" INFO [main] 2013-05-10 12:52:40,975 CassandraDaemon.java (line 166) Classpath: bin/../conf:bin/../build/classes/main:bin/../build/classes/thrift:bin/../lib/antlr-3.2.jar:bin/../lib/apache-cassandra-1.2.4.jar:bin/../lib/apache-cassandra-clientutil-1.2.4.jar:bin/../lib/apache-cassandra-thrift-1.2.4.jar:bin/../lib/avro-1.4.0-fixes.jar:bin/../lib/avro-1.4.0-sources-fixes.jar:bin/../lib/commons-cli-1.1.jar:bin/../lib/commons-codec-1.2.jar:bin/../lib/commons-lang-2.6.jar:bin/../lib/compress-lzf-0.8.4.jar:bin/../lib/concurrentlinkedhashmap-lru-1.3.jar:bin/../lib/guava-13.0.1.jar:bin/../lib/high-scale-lib-1.1.2.jar:bin/../lib/jackson-core-asl-1.9.2.jar:bin/../lib/jackson-mapper-asl-1.9.2.jar:bin/../lib/jamm-0.2.5.jar:bin/../lib/jbcrypt-0.3m.jar:bin/../lib/jline-1.0.jar:bin/../lib/json-simple-1.1.jar:bin/../lib/libthrift-0.7.0.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/lz4-1.1.0.jar:bin/../lib/metrics-core-2.0.3.jar:bin/../lib/netty-3.5.9.Final.jar:bin/../lib/servlet-api-2.5-20081211.jar:bin/../lib/slf4j-api-1.7.2.jar:bin/../lib/slf4j-log4j12-1.7.2.jar:bin/../lib/snakeyaml-1.6.jar:bin/../lib/snappy-java-1.0.5-M4.jar:bin/../lib/snaptree-0.1.jar:bin/../lib/jamm-0.2.5.jar"}]},{"key":"1368147160978:aarons-MBP-2011.local:cassandra","cols":[{"name":"raw","value":" INFO [main] 2013-05-10 12:52:40,978 CLibrary.java (line 61) JNA not found. Native methods will be disabled."}]},{"key":"1368147160974:aarons-MBP-2011.local:cassandra","cols":[{"name":"raw","value":" INFO [main] 2013-05-10 12:52:40,974 CassandraDaemon.java (line 127) JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.7.0_21"}]},{"key":"1368147160995:aarons-MBP-2011.local:cassandra","cols":[{"name":"raw","value":" INFO [main] 2013-05-10 12:52:40,995 DatabaseDescriptor.java (line 132) Loading settings from file:/Users/aaron/servers/cassandra/apache-cassandra-1.2.4/conf/cassandra.yaml"}]}]},"exception":null,"exceptionId":null}* Closing connection #0