Getting rid of the old stuff
Refactoring the way we execute commands in `s3cmd`

Instead of a hardcoded `case/when`, now we declare all the commands in a
separate module, so when we want to call them, we just need to match the
command requested in by the user with the list we have;

This technique will allow us to easily write a plugin system later, but
for now I'm just trying to separate the features in smaller components
so it's easier to maintain, test and debug.
Fixing error reporting on wrong arguments
Adding the `url` subcommand
Removing unnecessary piece of code
Fixing some NameErrors and cleaning some code
Finishing pretty basic `sync` command (local > remote only)

This command takes a local directory as the source and synchronizes it
with a remote directory. The same idea might be applied to do the other
way around, I just wanted to keep things sane for now;

The brand new command takes the `--exclude` param that receives a ruby
regular expression and filters the upload list. Pretty useful for
filtering backup files for example.

  $ s3cmd sync --exclude="\#" ~/Work/code/lib mybucket:code/
Adding the `--keep` to the sync command

This option allows the keep the files listed to be removed
from the remote host
Implementing logic to sync data in both directions (SyncCommand)

Tests were added to make sure all the supported ways of expressing
source and destination were working properly; After writing the tests,
the code was actually refactored to ~15 LOC;

Some more work was done improving reading data from source/destination
before actually performing io (The `read_tree` method); Also, all the
functions that will perform the actuall IO are working, but commented
out while the work in `read_tree` is not tested.
Refactoring code that reads local trees

Now the code that lists entries locally is tested and safe, the
component `LocalDirectory` was extracted from the old method
`read_local_tree` from `SyncCommand`;

The most important change here was that now `Node` objects are created
receiving their `base` path, their `relative path` and their
sizes. Notice that the `relative path` is relative to `base`;
Improving path resolution in the IO methods (sync command)

Now the user can pass the `--dry-run` flag to see what sync will do
without actually performing anything. The IO methods might still be
broken (I didn't test them), but the file lists exchanged seems correct;

Bugs fixed:

 * A lame check was added to normalize paths starting with `./`;

 * `LocalDirectory.list_files` should not list directories, just
   files. To make it easier to sync with the file list retrieved from
   s3 (that won't contain any folders);
Not showing info msgs in IO operations unless `--verbose` is used (sync)
Gem files and thus the first version: 0.1.0