Fix for Issue 351.

fileno() and gettarinfo() can't be used for abstract File objects.

From https://docs.python.org/2/library/stdtypes.html :

"file.fileno() ...
File-like objects which do not have a real file descriptor should not
provide this method!"

From http://bugs.python.org/issue22208 :

"If the file object is not based on a real file descriptor, tarfile cannot
simply use os.fstat() but the user has to pass the size somehow."