Large refactoring of the filter system

Transformations to the log messages were hitherto managed in a fairly ad-hoc
fashion, resulting in little consistency in the user interface or internal API
of filter functions.

This commit introduces the idea of a "filter chain", configured at the command
line, which applies to the log lines passing through `logtag` and `logship`.
Filters are currently divided into three types (distinguished by a name prefix),
although it's clear that additional types may well be necessary.

1. `init_*` filters are intended to be the first filters in a filter chain, and
   parse the incoming log lines from STDIN.

2. `add_*` filters (some of which, such as `add_tags` and `add_fields`, take
   arguments) add information (usually semantic or environment context) to the
   objects (dictionaries) passing through the filter chain.

3. `parse_*` filters (of which there is currently only one example,
   `parse_lograge`) extract information from the objects passing through it, and
   annotate said objects with parsed interpretations of that information,
   usually by adding data to the `@fields` key.

Both `logtag` and `logship` currently provide a default filter chain of

   init_txt,add_timestamp,add_source_host

which treats the incoming log lines as plain text, and adds a timestamp and
hostname information to each log entry.

This filter chain can currently be either overridden on the commandline, with
the `--filters` option, or appended to, with the `--filters-append` option. For
example:

    $ echo Hello | logtag --filters init_txt,add_timestamp
    {"@message": "Hello", "@timestamp": "2013-05-01T15:49:45.038730Z"}

    $ echo Hello | logtag --filters init_txt,add_tags:foo:bar
    {"@message": "Hello", "@tags": ["foo", "bar"]}

    $ echo Hello | logtag --filters-append add_tags:foo:bar
    {"@timestamp": "2013-05-01T15:50:32.299689Z", "@source_host": "lynx.local", "@message": "Hello", "@tags": ["foo", "bar"]}