Refactor and clean-up Druid data ingestion Part 1 (The Schemas)

Druid data ingestion schemas now consist of 3 things:
1. DataSchema - this JSON object defines the datasource, timestamp, dimensions, metrics and granularities of the ingested data. Each data schema requires a parser, which is used to parse the data. Each parser contains a parseSpec, and the current supported formats are csv, delimited, and json. Both the parser and parseSpec should be easily extendable for different storage formats (csv, tsv, json, etc.) and different delivery formats (string, protoBuf, bytes, etc). Granularity specs include the segment granularity and the query (rollup) granularity. Data schemas can be reused for both batch and real-time ingestion, as well as any new ingestion formats.
2. IOConfig - this JSON object defines where data is coming from and where it is going. For real-time ingestion, it includes a firehose and a plumber. For hadoop indexing, it includes the pathspec, the segment metadata update spec (formerly called the db updater spec), and the segment output path.
3. DriverConfig - this JSON object defines indexing parameters such as target Partition size or max rows in memory. Driver configs for both real-time and batch are optional, and reasonable defaults have been introduced for them.

This PR will also introduce the following things:
- See: https://github.com/druid-io/druid-api/pull/9
- deprecated data specs
- introduced parse specs
- rejiggered input row parsers
- changed the firehose interface
- moved the parser from firehose to dataSchema
- moved a lot of configuration out of firehoses and plumbers into driver configs
- removed SegmentGranularity; segmentGranularities in druid now use the java-util Granularity class. Query granularities still use QueryGranularity.
- refactored plumbers

- docs are coming

An example of a full real-time spec:
```json
[
  {
    "dataSchema" : {
      "dataSource" : "wikipedia",
      "parser" : {
        "type" : "string",
        "parseSpec" : {
          "format" : "json",
          "timestampSpec" : {
            "column" : "timestamp",
            "format" : "auto"
          },
          "dimensionsSpec" : {
            "dimensions": ["page","language","user","unpatrolled","newPage","robot","anonymous","namespace","continent","country","region","city"],
            "dimensionExclusions" : [],
            "spatialDimensions" : []
          }
        }
      },
      "metricsSpec" : [{
        "type" : "count",
        "name" : "count"
      }, {
        "type" : "doubleSum",
        "name" : "added",
        "fieldName" : "added"
      }, {
        "type" : "doubleSum",
        "name" : "deleted",
        "fieldName" : "deleted"
      }, {
        "type" : "doubleSum",
        "name" : "delta",
        "fieldName" : "delta"
      }],
      "granularitySpec" : {
        "segmentGranularity" : "DAY",
        "queryGranularity" : "NONE"
      }
    },
    "ioConfig" : {
      "type" : "realtime",
      "firehose": {
        "type": "kafka-0.7.2",
        "consumerProps": {
          "zk.connect": "localhost:2181",
          "zk.connectiontimeout.ms": "15000",
          "zk.sessiontimeout.ms": "15000",
          "zk.synctime.ms": "5000",
          "groupid": "druid-example",
          "fetch.size": "1048586",
          "autooffset.reset": "largest",
          "autocommit.enable": "false"
        },
        "feed": "wikipedia"
      },
      "plumber": {
        "type": "realtime"
      }
    },
    "driverConfig": {
      "type" : "realtime",
      "maxRowsInMemory": 500000,
      "intermediatePersistPeriod": "PT10m",
      "windowPeriod": "PT10m",
      "basePersistDirectory": "\/tmp\/realtime\/basePersist",
      "rejectionPolicy": {
        "type": "messageTime"
      }
    }
  }
]
```

An example of a simplified realtime spec:
```json
[
  {
    "dataSchema" : {
      "dataSource" : "wikipedia",
      "parser" : {
        "parseSpec" : {
          "format" : "json",
          "timestampSpec" : {
            "column" : "timestamp"
          },
          "dimensionsSpec" : {
            "dimensions": ["page","language","user","unpatrolled","newPage","robot","anonymous","namespace","continent","country","region","city"]
          }
        }
      },
      "metricsSpec" : [{
        "type" : "count",
        "name" : "count"
      }, {
        "type" : "doubleSum",
        "name" : "added",
        "fieldName" : "added"
      }, {
        "type" : "doubleSum",
        "name" : "deleted",
        "fieldName" : "deleted"
      }, {
        "type" : "doubleSum",
        "name" : "delta",
        "fieldName" : "delta"
      }]
    },
    "ioConfig" : {
      "type" : "realtime",
      "firehose": {
        "type": "kafka-0.7.2",
        "consumerProps": {
          "zk.connect": "localhost:2181",
          "zk.connectiontimeout.ms": "15000",
          "zk.sessiontimeout.ms": "15000",
          "zk.synctime.ms": "5000",
          "groupid": "druid-example",
          "fetch.size": "1048586",
          "autooffset.reset": "largest",
          "autocommit.enable": "false"
        },
        "feed": "wikipedia"
      },
      "plumber": {
        "type": "realtime"
      }
    }
  }
]
```
Oh, and everything is backwards compatible.