Use dash to check shell scripts

We cannot rely on error patterns produced by an arbitrary /bin/sh shell
because there is a wide variety of different Unix systems with different
/bin/sh implementations.

For instance, OS X and some Linux systems use bash as /bin/sh, whereas
Ubuntu and Debian use dash, with greatly different error output formats.

To work around potential issues, always use dash for error checking.
It's available for OS X via homebrew, and on all Linux systems via
package management.
Support php+-mode

See https://github.com/echosa/phpplus-mode
Restore alphabetic ordering of checkers
Fix checker selection for checkers without modes

For checkers without modes :modes is nil, however `(symbolp nil)` holds,
making `flycheck-checker-modes` return `(nil)` instead of `nil` which
caused `flycheck-check-modes` to falsely return nil if the checker had
no modes.