First rough http branch redirection implementation.
* bzrlib/transport/http/_urllib2_wrappers.py: (Request.__init__): Unless told otherwise, redirections are followed silently. (HTTPRedirectHandler.http_error_30x): Follow redirection or return a 30x error.
* bzrlib/transport/http/_urllib.py: (HttpTransport_urllib._perform): Raises RedirectRequested if the request requires it. (HttpTransport_urllib._get): Update the request from the hints parameter if needed.
* bzrlib/errors.py: (RedirectRequested): New TransportError.
* bzrlib/bzrdir.py: (BzrDir.open_from_transport): Catch RedirectRequested and retry with the redirected url until we get to the final destination. (BzrDirFormat.probe_transport): Hints get to not follow the redirections but instead tell us where this branch is redirected.
* bzrlib/transport/smart.py: (SmartTransport.get): Add a 'hint' parameter.
* bzrlib/transport/sftp.py: (SFTPTransport.get): Add a 'hint' parameter.
* bzrlib/transport/memory.py: (MemoryTransport.get): Add a 'hint' parameter.
* bzrlib/transport/local.py: (LocalTransport.get): Add a 'hint' parameter.
* bzrlib/transport/http/_pycurl.py: (PyCurlTransport._get): Add a 'hint' parameter and pass it to _get_full.
* bzrlib/transport/http/__init__.py: (HttpTransportBase.get): Add a 'hint' parameter and pass it to _get.
* bzrlib/transport/ftp.py: (FtpTransport.get): Add a 'hint' parameter.
* bzrlib/transport/fakevfat.py: (FakeVFATTransportDecorator.get): Add a 'hint' parameter and pass it to the decorated transport.
* bzrlib/transport/decorator.py: (TransportDecorator.get): Add a 'hint' parameter and pass it to the decorated transport.
* bzrlib/transport/chroot.py: (ChrootTransportDecorator.get): Add a 'hint' parameter. Delete a duplicated definition of the method.
* bzrlib/transport/__init__.py: (Transport.get): Add a 'hint' parameter. (TransportLogger.get): Add a 'hint' parameter and pass it to the