Start core FTP I/O code -- alpha

As FTP is not a multithreaded protocol _but_ filesystems implementation must be,
there is a compromise.

An FtpAgentQueue will be created for each FtpFileSystem; it will provide a
fixed number of agents which the caller will then give back by .close()ing the
agent.

An FtpAgent is the part doing the real I/O. It will get file attributes,
directory contents and InputStreams from the FTP server.

An InputStream is wrapped by an FtpInputStream which also has a reference to the
agent; again, this is because FTP is not multithreaded: you can only have one
data connection per client.