Add support for client binary on upgrade

Went ahead and implemented this, looking for feedback, how do those file permissions look to you?

ping @SvenDowideit @tianon 
Shouldn't that be `arch += ".exe"` instead?  Or better yet, a separate empty `ext` variable that gets set to `.exe` here?

Also, same comment about having a `default:` case with an `error` return would be nice.