Add download and upload info for get and put

Partially fixes #236.

Partially because now it only adds progress bar to get and put of single files (it was not implemented for entire directories).

To see my code running, please create a file called `test_progressbar.sh` with the contents below and execute `source test_progressbar.sh`. You need `virtualenv`, `virtualenvwrapper`, `git` and `python` to execute this script correclty.


    #Create a virtualenv for testing and cd to it:
    mkvirtualenv fabric_progressbar
    cdvirtualenv
    
    #Clone my repo at GitHub:
    git clone git@github.com:turicas/fabric.git
    cd fabric
    git checkout -b 236-add_download_and_upload_info_for_get_and_put origin/236-add_download_and_upload_info_for_get_and_put
    
    #Install fabric:
    python setup.py install
    cd ..
    
    #Create a simple fabfile.py like this:
    echo "import random
    from fabric.api import *
    import random
    
    env.hosts = ['localhost']
    
    big_file = '/tmp/big_file'
    tmp_file = '/tmp/' + str(random.random()) + '.tar.gz'
    
    def test_put():
        put(big_file, tmp_file)
    
    def test_get():
        get(big_file, tmp_file)" > fabfile.py
    
    #Create the big file (500MB) for testing:
    dd if=/dev/zero of=/tmp/big_file bs=1M count=500
    
    #Now, really testing:
    fab test_put
    #(You'll see something like below)
    #
    #[localhost] Executing task 'test_put'
    #[localhost] put: /home/alvaro/big_file.tar.gz -> /tmp/0.0159389561402.tar.gz
    # 582.16 MiB / 582.16 MiB (100.00%), duration:         36s, avg:  15.94 MiB/s
    #
    #Done.
    #Disconnecting from localhost... done.
    #
    
    fab test_get
    #(You'll see something like below)
    #
    #[localhost] Executing task 'test_get'
    #[localhost] download: /tmp/0.838885038642.tar.gz <- /home/alvaro/big_file.tar.gz
    # 582.16 MiB / 582.16 MiB (100.00%), duration:         25s, avg:  22.67 MiB/s
    #
    #Done.
    #Disconnecting from localhost... done.
    #


Explaining the changes:

- Added functions `human_readable_size` and `human_readable_seconds` to `fabric/utils.py` that just convert bytes to KiB/MiB/etc. and seconds to hh:mm:nn (see `tests/test_utils.py` for more information)
- Added functions `_print_upload_info` and `_print_download_info` to `fabric/operations.py` that are passed as callback functions to paramiko so these functions know the total size and actual size of transferring operation (download or upload). With it, we can print using `sys.stdout` the actual percentual of the transfer operation.
- Actually the functions above call generic function `_print_up_or_download_info` that does calculations and prints the status of the transfer.
- Inside `put()` and `get()` we add upload/download information to `env` and call `ftp.put()` and `ftp.get()` passing the callback function if `output.running == True`.
- In the functions `SFTP.get()` and `SFTP.put()` located at `fabric/sftp.py` we call the paramiko functions `get()` and `put()` (`self.ftp.get()` and `self.ftp.put()`) with callback functions if `SFTP.get()`/`SFTP.put()` was called with the parameter `callback_function`.