ls_colors.c: favor new env var $GIT_COLORS over $LS_COLORS

This allows us to define to color new things without breaking GNU ls
(if it can't parse something in $LS_COLORS it'll fall back to no
colors).

This may be a bad move. We store color settings in config file. A
better approach is prefer ls.color.* and fall back to $LS_COLORS.
ls-files: add --color to highlight based on $LS_COLORS

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
ls-files: add --column

Default pathspec behavior is recursive which includes too many files
for effective column output. But if you can do

git ls-files --column ':(glob)*'

to limit to one level only. It's not exactly the same as GNU ls
(e.g. directories are never shown) but much closer.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
ls-files: support --max-depth

The use case in mind is --max-depth=0 to stop recursion. With this we can do

git config --global alias.ls 'ls-files --column --color --max-depth=0'

and have "git ls" with an output very similar to GNU ls. Another
interesting one is

git config --global alias.lso 'ls-files --column --color --max-depth=0 -o --exclude-standard'
Add git-ls, a user friendly version of ls-files and more

This is more user friendly version of ls-files:

* it's automatically colored and columnized
* it refreshes the index like all porcelain commands
* it defaults to non-recursive behavior like ls
* :(glob) is on by default so '*.c' means a.c but not a/b.c, use
  '**/*.c' for that.
* auto pager
ls: add -R/--recursive

People can already do "ls --max-depth=-1" but it's probably not as
friendly. One of the use case is "ls -mR" which is basically "git diff
--name-only"
ls(-files): add -M to show "diff --cached" entries

With this, "ls -mR" shows you all changed files in worktree, "ls -MR"
in cache, or "ls -MmR" both (entries will be duplicate). diff-cached
files are bright magenta by default.

FIXME: what about color for -m?
FIXME: -M does not play nice with -c