Messages: add support for tags

Not used right now,
but will be used to specify Kafka topics, for example.
Going fully modular!

A lot is happening here.

The overall idea is to get rid of sinks in favor of filters,
a more powerful abstraction.

We have yet to provide good reporting functionality for those,
but please be patient :)
Introduce filter interface in plog-api

This will be useful to introduce stats reporting for filters.
For the time being more of a NOOP that breaks the API,
and makes us move from anonymous classes to inner classes
in a bunch of places.
build.gradle: add minimal-json for all subprojects

Growing tired of manual JSON :)

We'll use this lightweight and simple JSON implementation for stats
reporting.
SimpleStatisticsReporter: migrate to minimal-json

Such a breath of fresh air.
Track unhandled objects

Required as we move from sinks to filters,
which means pipelines could trivially do the wrong thing(c).

Closes #47.
SimpleStatisticsReporter: simplify defragmenter logic

Now that we're back to one stat per port,
we don't need support for multiple defragmenters.
Reintroduce stats!

Turns out everything has stats. EVERYTHING!
IntelliJ reformatting
provide a nice MessageImpl.toString(), use it in console
More stats, always provide a filter name

This will increase readability of stats.

Also, that JSON library is absolutely amazing.
README.md: use filters to get started
reference.conf: remove Kafka sink config

Kafka is just "one way" of using Plog.
It's all down to the filters now ;)
rename com.airbnb.plog.App->PlogServer

Will provide a better name in `jps`, and
it's simply more explicit than "App".
PlogServer: log when starting

This allows to quickly inspect how long startup takes, which could
prove useful in pathological cases.
plog-server/build.gradle: no kafka, no log4j

We used to create a Kafka to check the validity of the associated JSON
stats.

As Kafka became a filter rather than sink and stats logic moved
completely off the server, that test dependency is no longer required.
plog-distro: consistent logging with logback

At this point looks like log4j has a rather inconsistent behaviour.

Looks like we can send everything through logback, which pretty much rocks.

@andykram should be happy.
Rename `Filter` to `Handler`

Now that they're used to "do everything"
rather serve the particular purpose of transforming `Message`s,
and given they're a very small interface on top of `ChannelHandler`s,
filters are named handlers like in Netty.
build.gradle: v4.0.0-ALPHA
Embrace tags in the message API

The API always expects tags to make sure
transforming handlers won't destroy tags by accident.