Shell: Rewrite 'ls' and add formatting/sort flags

This patch replaces the previous 'ls' command by adding support for specifying
multiple paths and formatting/sort flags.

Fixes #2.

I've tried to make it behave as close as possible to the original 'ls', due to
limitations (see below), it might not always be the case.

Added flags:
* -R, --recursive: Lists subdirectories recursivley
* -l: Long format listing (the notoriously known 'ls -l' table)
* -S: Sort by size
* -t: sort by modification time, newest first
* -X: sort alphabetically by entry extension
* -r: reverse order while sorting

A few notes:
* Although it now accepts multiple command line arguments, denoting multiple
  paths, it doesn't expand those paths (e.g. 'ls -l *' will result in
  "ls: *: file not found"). This will probably be added later.
* Due to a limitation in CRaSH, one cannot assign multiple short flags
  together (e.g. ls -lrt). I'm discussing this with upstream.
* Normal 'ls' allows you to specify multiple sort flags and is using them by
  the order which they appear. Because in CRaSH flags are simply parameters of
  a method, I've yet to find a way to tell the order in which they were used.
* Long format printing depends on getgrgid_r() (cloudius-systems/osv@31973bd).

Signed-off-by: Or Cohen <orc@fewbytes.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>