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
Not sure if changing `dir` to `project-root` is a good idea as I don't remember why I wrote the code as it is. :-) If only I had written more unit tests...