Binary API: binary_get() now returns smart object instead of url/data

Previously, a call to binary_get() would either return a newly-created
URL to access the binary data from the backend store or it would return
the actual data itself, depending on the parameter fetch_url.

The new function returns a BinaryResponse object that has .url property
which will return the access URL, and .read() which returns the data.
In both of these cases, the BinaryResponse checks to make sure that the
URL is still valid, since they expire. If invalid, it raises a new
UrlError.

Note: BinaryResponse only checks whether the URL ought to be valid,
given the expiration time it received when it was created by binary_get()
It could happen that the URL expires from some other source or is
removed or changed. In these cases, BinaryResponse will be unaware of
the problems. Any exceptions or errors will be raised or handled by
urllib2.urlopen().