Call close() instead of deleting _ftpTransfer directly
Implement a remove operation on a file on a FTP server
Start threads for read/write in read()/write()

This avoids unnecessary read/write operations when perform non-
Clear buffer when resetting
Fix deadlock

Conditions,
    1. readData() acquires _mutex
    2. flush() acquires _bufferLengthMutex
    3. readData() try to acquire _bufferLengthMutex
    4. flush() try to acqure _mutex by calling dataLength()
    5. deadlock
FtpSync::wait() return an success status
FtpFileEngine::remove() return a success status
Return the result of up to remove() operation
pos() has no meaning on a sequential device
Use a local event loop instead of msleep() and processEvents()
Do not call qApp->processEvents()

Instead, use multi-threads
Rename _bufferLength* to _dataLength*
Reimplement file operations with multi-threads
Modify #include path
Support to abort FTP transfer
Initalize _basePos and _readPos in open()
Change ProgressDialog show policy

1. show only if there are any entires when copying
2. do not show immediately when removing
Set a index of a removing entry correctly
Display a message box while canceling
Add title() to return a program title