Move importlib.abc.SourceLoader to _bootstrap.

Required updating code relying on other modules to switch to _bootstrap's
unique module requirements. This led to the realization that
get_code was being too liberal in its exception catching when calling set_data
by blindly grabbing IOError. Shifted the responsibility of safely ignoring
writes to a read-only path to set_data.

Importlib is still not relying on SourceLoader yet; requires creating a
SourcelessLoader and updating the source finder.
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index 300653a..008df09 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -248,7 +248,8 @@
     .. method:: set_data(self, path, data)
 
         Optional abstract method which writes the specified bytes to a file
-        path.
+        path. When writing to the path fails because the path is read-only, do
+        not propagate the exception.
 
     .. method:: get_code(self, fullname)