Implement an index backent for HSQLDB

## Overview

This pull request provides a new index backend that uses an embedded in-memory [HSQLDB](http://hsqldb.org/) to store the events.

## The Problem

The current `index` implementation requires scanning of the entire index for all queries. This can become CPU intensive as the size of the index and the number of queries per second grows.

## The Solution

To speed up queries, we convert the queries to SQL and use indexes on all of the queryable columns.

## The State Of Things

This pull request is still a work in progress and is **not ready to be merged**.

The majority of the code has been written, but I'm sure there's a lot more to do. It hasn't been run with any clients, so I'm sure there will be more issues that that will hash out.

No load testing of any kind has been done yet, so how this performs in the real world compared to the existing index is not currently known.