Performance optimization and eliminate boilerplate code

Hi Bozhidar,

I added a few improvements:

1. Optimized the macro `helm-source-projectile-projects` for the sake of performance. This is 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.
2. Minor cleanup on `projectile-project-vcs`
3. Added the optional parameter `project-root` for function `projectile-vc` to allow being called from `helm-projectile-vc`, to eliminate boilerplate code.

Thanks,

York Zhao
This optional parameter was added by Tu Do recently in the commit
f4db7a0cfe212e9a41c3c00dd019818f5b0308a1. It was named "dir" by accident, which
is cumbersome because we then had to assign it to the existing variable
"project-root". By naming the parameter directly as "project-root", we can drop
the superfluous (let ((project-root ...))) wrapper which is the whole point of
my changes. Anyway, the point is to eliminate the unnecessary indirect layer.