Activate Eshell and Magit outside of project for helm-projectile

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. We need to disable project root requirement.

Signed-off-by: Tu Do <tu.h.do@dektech.com.au>
Add compile action to helm-projectile
Reuse existing Helm actions

Helm already provides lists of usable actions for helm-find-files and
helm-recentf. We should reuse these actions for
helm-projectile-find-file and helm-projectile-recentf.

Signed-off-by: Tu, Do <tuhdo1710@gmail.com>
Use proper Helm interface for Projectile commands

Since we already have sources for the generic command helm-projectile,
we could reuse those sources and create commands for normal Projectile
commands. The reasons:

- Setting projectile-completion-system to 'helm is not enough, because
it only uses Helm interface but does not provide useful Helm features
like those in helm-projectile.

- In large source tree, open helm-projectile could be slow because it
  needs to open all Helm sources. In this case, individual commands are
  more optimal.

This change is not intrusive: users can choose to use it or not with
helm-projectile-on command, and during using the bindings, users can
turn off with helm-projectile-off.
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.

Also refactor code to make it reusable for both normal projectile and
helm-projectile. The new dwim commands are bound to "g" key, because it
is next to "f" key and we can think of "g" as "go".

Signed-off-by: Tu Do <tu.h.do@dektech.com.au>
Update docstring commands that find other files
Update CHANGELOG