Generic syntax checkers

Add support for generic syntax checkers.

This PR splits syntax checking from processes, and adds `flycheck-define-generic-checker` to define syntax checkers for arbitrary functions.

Solves #294 and #169.

# API for generic checkers

```cl
(flycheck-define-generic-checker foo
  "A foo syntax checker."
  :start #'start-foo
  [:interrupt #'foo-interrupt]
  :modes …)
```

`:start` starts the syntax checker and `:interrupt` interrupts it.  The latter is optional.  If a checker doesn't support interruption, Flycheck won't try to interrupt it, and instead just silently ignore it's results.

Flycheck expects `:start` to work asynchronously, and passes it a callback for status reporting.  The `:start` function **must** call this call back at least once, when finished.  Failure to do so will leave Flycheck in an inconsistent state.

`:start` shall return a “context” object, which is stored by Flycheck and subsequently passed to `:interrupt`.  It can be whatever you want, e.g. a network connection, a process, or some custom data structure (e.g. an alist or a struct).

The standard `flycheck-define-checker` was re-implemented on top of this new facility.  As part of this, the new function `flycheck-define-command-checker` provides a non-macro variant of `flycheck-define-checker`.

# Compatibility

This new branch should not break source compatibility of user configurations and Flycheck extensions, at least for the public API.

It will however **break binary compatibility**!  IOW, all packages depending on Flycheck **must be recompiled**, or cease to work.  This is a consequence of the huge internal changes required for this feature, and cannot be avoided.

# TODO

- [x] Fix remaining bugs and races
- [x] Document status reporting protocol, i.e. the parameters of the status callback
- [ ] Update the `extending` chapter of the manual