When io.BufferedReader (and others) are init-ed based on a file
descriptor, their name attribute will be an integer. Handle these
objects by explicitly checking for an integer type in guess_format() and
setting sane values (empty strings).
We don't trap an exception because Python 2 and 3 throw different types;
AttributeError and TypeError, respectively. So, this way seemed cleaner.
A trailing comma resulted in Entry.pathname being a tuple instead
of a string when using Entry.from_archive() in Python 2.
This partially reverts 5013165958 ("Fix tests for python 2 and 3"),
which accounted for Entry.pathname as a tuple, instead of addressing why
it had become one.
This also adds whitespace around the assignment operator for Python 2
and 3 to look less like a keyword argument assignment (which appears to
be where the comma originally came from).
Add a high-level API test that initially focuses on various ways that
an Archive object can be directed to use a particular file:
1. filename
2. file-like object opened by name
3. file-like object opened by fileno()
The 3rd way is currently broken for Python 2 and Python 3.