Towards consistent null handling

This PR includes a number of fixes to handle nulls more consistently on the query side.  These fixes were done to support a user who is leveraging the schema-less capabilities of Druid.  It's sufficient for all needs we've currently found, but I am not certain that it is comprehensive just yet.

Fixes #665 in the following manner

- return null values for all matching rows when a columns is missing (e.g. for groupBy, topN)
- treat empty string and null the same, but always return null
- allow specifying null in filters

- for multi-value dimensions, if the dimension has multiple values:   
     1. dim extraction returns null -> null
     2. missing column -> null
     3. [] -> null
     4. [""] -> [null]
     5. ["", "a"] -> [null, "a"]

- for single value dimensions
    1. missing column -> null
    2. dim extraction returns null -> null
    3. [""] -> null
    4. [] -> null



Also, on the PR is the addition of a context parameter on timeseries queries that allows it to ignore empty buckets.  I realize that this should've been separated into two PRs, but there is a bit of context behind these commits that makes that difficult.  It's just a few changes in `TimeseriesQuery`, `TimeseriesQueryEngine` and `TimeseriesQueryRunnerTest`
@drcrallen The benefit of not doing value.isEmpty is that value can be null leading to NPE. I have a bit of an avertion to 3 things in that code. 
1) nested if's
2) null checks 
3) repeated checks that look the same in general should be extracted to methods. 
They can usually be easily factored out.

Doing so makes code more readable and less error prone IMHO.

An extreme example would be something that looks like this.
if(location != null)
  if(location == bedroom || location == livingroom || location == ...

instead create a clear method called isAtHome with all the components in it. This will read much better. Also when you change the definition of isAtHome you only do it once instead of all the places with the multiple checks making up isAtHome

first try might be

if(location != null && location.isHome)

If you use the null object pattern it breaks down to

if(location.isAtHome())

Any, I'll get off my soapbox now :-)