allow "fake" filenames in findsource (closes #9284)

This allows findsource() to work in doctests.

A patch from Dirkjan Ochtman.
diff --git a/Lib/inspect.py b/Lib/inspect.py
index b0b2d3a..c727530 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -524,9 +524,13 @@
     or code object.  The source code is returned as a list of all the lines
     in the file and the line number indexes a line in that list.  An IOError
     is raised if the source code cannot be retrieved."""
-    file = getsourcefile(object)
-    if not file:
+
+    file = getfile(object)
+    sourcefile = getsourcefile(object)
+    if not sourcefile and file[0] + file[-1] != '<>':
         raise IOError('source code not available')
+    file = sourcefile if sourcefile else file
+
     module = getmodule(object, file)
     if module:
         lines = linecache.getlines(file, module.__dict__)