Improve projectile and helm-projectile with more features

Currently both `helm-projectile-switch-to-eshell` and `helm-projectile-vc` use projectile-project-root to get full pathnames, but `projectile-project-root` does not allow usage outside of a project. `projectile-project-root` is not really necessary since the project directories already are relative to home directory.

More actions are added to `helm-source-projectile-files-list` and `helm-source-projectile-recentf-list` by reusing `helm-find-files` and `helm-recentf` lists of actions.

We should also supply Helm version of common Projectile commands:

- helm-projectile-switch-project
- helm-projectile-find-file
- helm-projectile-find-dir
- helm-projectile-recentf
- helm-projectile-switch-to-buffer

Make projectile-find-file do what I mean: If point is on a filepath, Projectile first tries to search for that file in project:

- If it finds just a file, it switches to that file instantly.  This works even if the filename is incomplete, but there's only a single file in the current project that matches the filename at point. For example, if there's only a single file named "projectile/projectile.el" but the current filename is "projectile/proj" (incomplete), projectile-find-file still switches to "projectile/projectile.el" immediately because this is the only filename that matches.

- If it finds a list of files, the list is displayed for selecting. A list of files is displayed when a filename appears more than one in the project or the filename at point is a prefix of more than two files in a
project. For example, if `projectile-find-file' is executed on a filepath like "projectile/", it lists the content of that directory. If it is executed on a partial filename like "projectile/a", a list of files with character 'a' in that directory is presented.

- If it finds nothing, display a list of all files in project for selecting.

This new dwim command is really useful. For example, if you have a list of files - just a list of files without path, only names - in your project, you can execute the dwim command on a filename (no path) and it jumps to that file instantly.

Also refactor code to make it reusable for both normal `projectile` and `helm-projectile`.