Formally declare checkers

Introduce checker declarations.

# Interface

```scheme
(flycheck-declare-checker flycheck-checker-zsh
  :command '("zsh" "-n" "-d" "-f" source)
  :error-patterns '(("^\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 1 2 nil 3 error))
  :modes 'sh-mode
  :predicate '(eq sh-shell 'zsh))
```

# Implementation

- Implement `flycheck-declare-checker` as macro.
- Store checker properties in the symbol property list.

# Rationale

Formally declare checkers to unify their treatment and improve error reporting.

# Advantages

- Verification of checkers during *declaration* (formerly not until *use* of the checker)
- Online documentation of checker properties in `C-h f flycheck-declare-checker` (formerly only in `README.md`)
- Discovery of checkers on source level with `grep flycheck-declare-checker`
- Unification of internal treatment of checkers, because the checker symbol and the checker properties are no longer separate objects.