ls and stat improvements

I've made a huge number of changes for ls, focusing on making it easier to read and maintain as well as trying to make it as fast as possible, with a lot of success. In attempting to figure out why long mode was so terribly slow, I discovered that the reason was user.LookupID() being incredibly inefficient. Therefore, I wrote my own functions for obtaining user and group names by parsing /etc/passwd and /etc/groups. I remember that stat also needs to know group names so I have implemented that there as well.