This adds a 'url' arg to get_instance_metadata and get_instance_userdata
The reason for this argument is primarily to support using boto.utils in
a AWS like environment where there is a metadata service, but it is not
available in the standard location (under http://169.254.169.254/)
One such environment is Eucalyptus running in SYSTEM or STATIC modes.
Per http://open.eucalyptus.com/wiki/EucalyptusNetworkConfiguration_v2.0
| If your system is configured using SYSTEM or STATIC networking modes,
| then retrieving data requires the IP (or hostname) and port number of
| the Eucalyptus Cloud Controller (CLC):
|
| http://<IP or hostname of CLC>:8773/<specific request>
Cloud-init is addressing this under the bug at
http://bugs.launchpad.net/bugs/761847
Also thanks to Kieran Evans.

This is mentioned only briefly and vaguely in the Python docs:
"If the exception class is derived from the standard root class
BaseException, the associated value is present as the exception
instance’s args attribute."
The basic gist is that if you override Exception.__init__, you
need to call super().__init__(*args). Failing to do this causes
some issues that aren't seen very often, but one of the most
bothersome things is that the exceptions are un-pickleable. If
you happen to be using something like celery, you get really
vague error notifications.
This commit makes our base exception classes "correct", which
should help prevent such annoyances for those of us who have
to pickle exceptions for some reason or another.
This should be 100% backwards compatible.