Fixes lp:1339976, lp:1270466 - manual provision, specific key + cloudint use ssh client

### Fix [lp:1270466](https://bugs.launchpad.net/juju-core/+bug/1270466)
Add the following cmd to add-machine:

```shell
juju add-machine ssh:user@10.10.0.3 -i ~/myid.pub
```

where -i is a specific identity key used to ssh into the machine. The key is also stored in the machine for future logins.

#### Tests

The custom key is passed to config.ReadAuthorizedKeys within ProvisionMachine. AuthKeysSuite already tests ReadAuthorizedKeys for passing in and reading specific keys and provisionerSuite already covers ProvisionMachine. As such, no extra tests have been added.

Tests for parsing the new parameters on the command have been added. 

### Fix [lp:1339976](https://bugs.launchpad.net/juju-core/+bug/1339976)
This PR also fixes a bug where cloudinit was not using the ssh client: cloudinit/sshinit/configure.go:63
> I did that at first, but then realised it actually makes no difference as we are throwing away the error anyway? I'm happy to put it back in though.

So we are; that would be a bug. Please check != "", and add an error check. We need to check that args.SSHKeyPath != "" because ReadAuthorizedKeys does different things based on whether it receives a path or a blank string.

> I also didn't check if args.SSHKeyPath + ".pub" exists as that is handled within the ReadAuthorizedKeys function.

Okay. I wonder if we should really be classifying that as an error, or if we should just warn early and call ReadAuthorizedKeys("") instead. Then the user would get the default public keys populated in authorized_keys still. I'll leave it to you to decide - there's arguments for either way, and this is new functionality.