version: add OSSupportedSeries

OSSupportedSeries returns the supported series
for the specified OS.
Unexpose environs/tools.ToolsLtsSeries
state/api: always "upload" all supported series

UploadTools no longer accepts a "fakeSeries"
parameter; the client just sends all of the
supported series of the same OS as the uploaded
tools. This is to support old API servers.

A separate commit will change the API server
side to disregard the parameter, and compute
the supported series on the server side. We
can deprecate the client side parameter in a
future version.

Also: return a generic error if status code
is not 200. We no longer need to check the
"method not supported" error specifically.
state/apiserver: clone uploaded tools for supported series

Disregard additional series specified by client, and clone
for all supported series of the same OS as the uploaded tools.
cmd/juju: remove redundant code from upgrade-juju

- Ignore/obsolete "--series" as in "juju bootstrap". UploadTools
  now computes the series to send to the API server (for backwards
  compat), and the API server now computes the same.
- Remove old backwards compat code.

Also, change jujud/bootstrap to use new version.OSSupportedSeries.
state/api: use juju/errors
Merge pull request #613 from axw/cmd-juju-upgradejuju-series

Various cleanups in upgrade-juju

**cmd/juju: remove redundant code from upgrade-juju**

- Ignore/obsolete "--series" as in "juju bootstrap". UploadTools
  now computes the series to send to the API server (for backwards
  compat), and the API server now computes the same.
- Remove old backwards compat code.

Also, change jujud/bootstrap to use new version.OSSupportedSeries.


**state/apiserver: clone uploaded tools for supported series**

Disregard additional series specified by client, and clone for all
supported series of the same OS as the uploaded tools.

**state/api: always "upload" all supported series**

UploadTools no longer accepts a "fakeSeries" parameter; the client just
sends all of the supported series of the same OS as the uploaded tools.
This is to support old API servers.

Also: return a generic error if status code is not 200. We no longer need
to check the "method not supported" error specifically.

**environs/tools: unexpose environs/tools.ToolsLtsSeries**

**version: add OSSupportedSeries**

OSSupportedSeries returns the supported series for the specified OS.
Download tools from API server

We will be eliminating the use of provider
storage for tools. This is a step in that
direction: hiding the use of provider storage
behind an HTTP API provided by the API server
for fetching tools. Later we will change the
backend to fetch the tools from GridFS, when
that work has been implemented.
environs/cloudinit: use aria2 to download tools from API servers

Now that we are serving tools in the API server, we must consider
the availability of the API server at the time a machine is
provisioned. The aria2 package is an alternative to curl that
is capable of failing over to additional sources and optionally
downloading chunks in parallel.

Note: curl can be built with support for Metalink, which would
have been a more conservative option. Unfortunately the version
of curl packaged in Ubuntu does not have Metalink support enabled.
provider/local: serialise tools in cloud-config

The local provider always has tools available
locally, and user-data for lxc and kvm does
not have the size limitations as in cloud providers.
Thus, we can safely serialise the tools tarball
into user-data in the local provider.
state/apiserver: fix sprintf, log errors

Log errors in sendError functions, and
change signature to not return error.
environs/cloudinit: retry tools download indefinitely
state/apiserver: use errors, fix sprintf