Alternative idea--use find_module to locate the path for the six module--looking first for the unadorned 'six' module that would be found on sys.path, and failing that looking up 'astropy.extern.bundled.six'.  Then load that module using the load_module machinery, but giving it the new name 'astropy.extern.six'.  That makes everything 'just work' and is compatible with six's own sys.modules games.
Two differences over previous version:
1) Checks for bundled six over system copy *first*.  For typical user
   self-installs I'd rather Astropy use its bundled version rather than
   default to whatever (potentially untested) version is floating around
   on the user's system (which may not even be the right module named
   "six"!
2) Regardless of where the 'six' module is found, checks that its
   __version__ meets the current minimum version 1.5.0.
Merge pull request #1 from embray/systemsix

Alternative idea