Refector - extract strategies out of commands

Hey

I want to add support for multiple deployment profiles, something like:

activate :deploy do |deploy|
  deploy.profiles.add("github") do |profile|
    profile.method = :git
  end
  deploy.profiles.add("heroku") do |profile|
    profile.method = :git
    profile.remote = "heroku"
    profile.branch = "master"
  end
end

Having looked at the code it seemed like it would be easier to do if I extracted the deploy methods out first, this pull request is for that. I thought it would be good to get the structure nailed down before adding the multi-profile support.

NB: I've only got git repos to test against so I haven't tested ftp, sftp or rsync. I've tried to avoid changing the implementations as much as possible but someone with a project set up for the other methods should probably try them before merging :)