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): minor cleanup
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.
Merge pull request #474 from YorkZ/helm-switch-project

Performance optimization and eliminate boilerplate code