Fix helm-projectile-vc

Currently we cannot switch to a project using vc-dir or magit-status
because helm-projectile-vc cannot pass the selected project directory
into projectile-vc. This fix makes it simpler to switch to VC status
anywhere without depending on project root. helm-projectile needs its
own helm-projectile-vc command.

The change to projectile-project-vc also makes it much faster to switch
project because it does not need to compute project root when explicitly
supplied. Otherwise, there's a brief unnecessary delay.
Merge pull request #470 from YorkZ/helm-switch-project

helm-projectile.el: rewrite `helm-projectile-define-key' to allow defini...
Merge pull request #468 from tuhdo/helm-projectile-vc

Fix helm-projectile-vc
Add file listing for sub-projects to Projectile

Add the ability for Projectile to automatically see sub-projects in a
project like Git submodule. It can handle cycle submodules (submodules
that can include itself as submodules and create a loop). The scenario
is described in details in function projectile-get-all-sub-projects.
Merge pull request #464 from tuhdo/master

Add file listing for sub-projects to Projectile
Update documentation

- Update README and ChangeLog and projectile-git-submodule-command
docstring.
Minor fix for retrieving submodules files

Use file-name-as-directory to convert a file to a directory, since it
is portable. The current implementation only works in Linux, as that's
exactly what file-name-as-directory does when it's in Linux.
Merge pull request #471 from tuhdo/master

Update documentaiton and minor fix for retrieving submodules files
helm-projectile.el (helm-projectile-define-key): performance optimization

Because "list" in Emacs Lisp is singly-linked list, frequently adding to the end
of a list using `add-to-list' can be slow. For this reason, it's better to add
to the front of a list, and just do a one-time reverse after adding all the
items.
projectile.el (projectile-project-vcs): cleanup by using `cl-defun'
Refactor `projectile-vc' to allow being used in `helm-projectile-vc'

Added the optional parameter `project-root' for `projectile-vc', so that the
function can be called from `helm-projectile-vc', to eliminate boilerplate code.