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.
- If it finds a list of files, the list is displayed for selecting.
- 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.

Signed-off-by: Tu, Do <tuhdo1710@gmail.com>