More FTP work

- Restructured code to flatten class hierarchy and support unit testing
- Refactored command opcodes and error codes. Largest change is instead of trying to return a pack of descriptive error codes for the various file system related commands. If a file system command fails, kErrFailErrno is returned, with the errno from the call in data[2]. Then the client can decide how fancy they want to get with error handling/display.
- Added support for create/remove directory and create file. (Only missing command now is write file)
- Added comprehensive unit tests for all of the above
- Fixed bugs found by the unit test
- Improved unit test support code

For code review, best viewed as completely new files intend of trying to make sense of the diff.