Vast performance improvement for Helm Projectile and bug fixes

Currently, Helm Projectile is inefficient at retrieving and processing
list of files retrieved from external commands. Here is how Helm
Projectile currently doing:

- It gets a LIST of files from projectile-current-project-files.
- In projectile-current-project-files, it first gets a list of files as
a single string returned from an external shell command separated by null
character. The string is then split into a list of files, using the null
- character as a separator.
- Helm gets this list of files and then concatenates the list of file
strings into one big string separated by a newline.

In a platform with weaker Emacs Lisp engine like Windows, going through
the whole standard Projectile process is really slow and could block
Emacs for a long time, making users think that Projectile is
malfunctioned on Windows.

This whole process is problematic, since Helm can just directly get the
list of files as a single string directly from external shell
commands. This change provides a more appropriate way for Helm to retrieve
the list of files and significantly improves performance on medium and
large projects and offer the same performance as helm-ls-git
package. After this change, without caching, running
helm-projectile-find-file on Linux source tree (under GIT), the list of
files is presented within a few seconds, on Windows.

The command helm-projectile-find-dir is also fixed to populate a list of
directory at init time, not when we want to get a list of
candidates. Otherwise, the command usually presents an empty list.

This commit also fixes a bug with SVN command to correctly filter files
from directory.