Implement main bakesale.sh script, which should be sourced.

Source the `bakesale.sh` script from a deployment script, to run
bakesale. The main script displays things in a friendly manner, creates
the cakebox, and sets up `bakesale()`.

Call `bakesale()` with parameters to utilise the helper scripts, which
get included. The first two parameters, `$stage` and `$cmd`, are used to
determine where to look for the helper script -- nothing fancy.

Most parameters are expected to be passed through to stage helper
scripts; however, there are the following variables, which are
accessible anywhere:

- `$bakesale_script` :
  The path of the deployment script itself. I'm not sure this is all
  that useful.

- `$bakesale_source` :
  The path of the main `bakesale.sh` script, which is used for sourcing
  stage helper scripts.

- `$bakesale_cakebox` :
  The cakebox used for packing the current cake. This is where all
  preparation takes place, before the cakebox is delivered to bakesales
  using something like rsync+ssh.
Add bake stage helper script git.

This assists with packing the cakebox with a git repository. It is
expected to be the most commonly used case. The repository is cloned
locally, to save wrestling with permissions server-side (if indeed the
cakebox is being deployed to a server, which it might not be), cloning
all submodules, and wiping out the `.git/` directory. This is a little
upsetting, but works well with submodules.

e.g.

    bakesale bake git git://github.com/tiredpixel/tunefl.git
Add bake stage helper script copy.

Yes, you can simply use cp in the deployment script, if you prefer.
But this means it's not necessary to specify the cakebox, which saves
some typing.

e.g.

    bakesale bake copy /Users/tiredpixel/server-abc.env .production.env
Add bake stage helper script link, for symlinks.

Yes, you can simply use ln in the deployment script, if you prefer.
But I prefer to not have to specify the cakebox. If you haven't already
guessed, this is a symlink, only.

e.g.

    bakesale bake link /var/log/tunefl/ log

Note that the link does not have to be valid locally.
Add carry stage helper script rsyncssh, for simple rsync+ssh delivery.

This uses rsync+ssh for delivering the cakebox to the bakesale in a
simple manner. There is no serverly magic involving `current/`,
`releases/`, `shared/` directories, as indeed delivery to a server is
just one option. Perhaps counter-intuitively, the first string of
parameters is passed to ssh, and the second to rsync. This enables the
second set to be omitted.

e.g.

    bakesale carry rsyncssh tunefl@example.com:tunefl/

e.g.

    bakesale carry rsyncssh tunefl@example.com:tunefl/ "--exclude vendor/bundle/ --exclude .bundle/ --exclude bin/"
Merge branch 'functional-skeleton' into develop
Rename carry stage rsyncssh to rsync_ssh.

Legibility, and all that.
Add wave stage helper script ssh_rvm_bundle.

This uses ssh+rvm+bundler to ssh into a server, load an RVM environment,
and install gems using bundler. If you're using the carry stage helper
script `rsync_ssh`, you'll probably want to remember to add `--exclude`
parameters for the directories `vendor/bundle/`, `.bundle`, `bin/`.
Which RVM path you use will depend on how RVM was installed.

e.g.

    bakesale wave ssh_rvm_bundle tunefl@example.com /usr/local/rvm/environments/ruby-2.0.0-p0@tunefl tunefl/

e.g.

    bakesale wave ssh_rvm_bundle tunefl@example.com /Users/tiredpixel/.rvm/environments/ruby-2.0.0-p0@tunefl tunefl/
Add wave stage helper script ssh_rvm_foreman.

This uses ssh+rvm+foreman to ssh into a server, load an RVM environment,
and use foreman, installing it if not already installed. I envisage the
most common usage of this helper script being to use foreman export. All
commands are run using sudo, which may or may not lose you sleep,
depending on your RVM installation.

e.g.

    bakesale wave ssh_rvm_foreman \
        tunefl@example.com \
        /usr/local/rvm/environments/ruby-2.0.0-p0@tunefl \
        "export --root tunefl/ --app tunefl --user tunefl upstart /etc/init"
Bring the cake out of hiding.

Ooop - this wasn't supposed to be commented.
Move stages bake/,carry/,wave/ into stages/.
Move cake into common/.
Implement version.txt.

The versioning for bakesale should be semantic, and should be stored
in `version.txt`.
Document many things in README.
Merge branch 'improvement' into develop