Put candidates fully matched on top when fuzzy sorting (#145).

* helm.el (helm--collect-pairs-in-string): New.
(helm-score-candidate-for-pattern): Use it, fix docstring.
Give a maximal score when pattern is fully matched.
Improve fuzzy sort function.

* helm.el (helm-fuzzy-matching-default-sort-fn-1): Memoize.
Get all infos of major-mode in helm-semantic and simplify (#777).

* helm-semantic.el (helm-semantic-source): Use helm-source-in-buffer.
(helm-semantic-get-candidates): Removed.
Allow adding more than one function to match/search slots.

* helm-source.el (helm--setup-source): Do it.
* doc/Home.mdpp: Update FAQ.
* helm.el (helm-score-candidate-for-pattern): regexp-quote pattern.
Add docstring in fuzzy sort function.

* helm.el (helm-fuzzy-matching-default-sort-fn-1,
helm-fuzzy-matching-default-sort-fn): Do it.
* helm.el (helm-score-candidate-for-pattern): Fix docstring.
Neutralize invalid regexps in in-buffer search.

* helm.el (helm-candidates-in-buffer-search-from-end,
helm-candidates-in-buffer-search-from-start): Do it.
* helm-files.el (helm-ff-sort-candidates): Use helm-score-candidate-for-pattern and memoize.
Move `helm-fuzzy-matching-default-sort-fn-1' logic into `helm-fuzzy-sort-fn'.

- `helm-M-x' was referencing the internal implementation, which makes it
  awkward to override with a custom sorter.
Minor fixes in previous (#783 PR) commit.

* helm-command.el (helm-M-x): source arg in sort fn is in use there.
* helm.el (helm-fuzzy-matching-default-sort-fn): Reindent.
Add faces to files according to dired
Improve helm-walk-directory.

* helm-utils.el (helm-walk-directory): No need to check for symlinks
with stringp as type=t ensure dir is not a symlink.
The helm-walk-directory version using file-name-all-completions.

* helm-utils.el (helm-walk-directory): Use file-name-all-completions.
* helm-utils.el (helm-walk-directory): Fix long lines.
* helm-utils.el (helm-walk-directory): Fix bug with infinite loop on symlinks.
* helm-utils.el (helm-walk-directory): Call directory-file-name only once.
Keep improving helm-walk-directory.

* helm-utils.el (helm-walk-directory): Even faster not computing the dotted
files at start of loop but one by one.
Add a new command for all sources documentation.

* helm-help.el (helm-documentation): New command.
(helm-documentation-file): New user var.
(helm-help--string-list): new internal.