Index: src/wp-admin/includes/class-wp-upgrader-skins.php
===================================================================
--- src/wp-admin/includes/class-wp-upgrader-skins.php	(revision 38348)
+++ src/wp-admin/includes/class-wp-upgrader-skins.php	(working copy)
@@ -7,35 +7,5 @@
  * @since 2.8.0
  */
 
-/** WP_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php';
 
-/** Plugin_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader-skin.php';
 
-/** Theme_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-theme-upgrader-skin.php';
-
-/** Bulk_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-bulk-upgrader-skin.php';
-
-/** Bulk_Plugin_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-bulk-plugin-upgrader-skin.php';
-
-/** Bulk_Theme_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-bulk-theme-upgrader-skin.php';
-
-/** Plugin_Installer_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-plugin-installer-skin.php';
-
-/** Theme_Installer_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-theme-installer-skin.php';
-
-/** Language_Pack_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-language-pack-upgrader-skin.php';
-
-/** Automatic_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php';
-
-/** WP_Ajax_Upgrader_Skin class */
-require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
Index: src/wp-classmap.php
===================================================================
--- src/wp-classmap.php	(nonexistent)
+++ src/wp-classmap.php	(working copy)
@@ -0,0 +1,72 @@
+<?php
+
+return array(
+	'Automatic_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php',
+	'Bulk_Plugin_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-bulk-plugin-upgrader-skin.php',
+	'Bulk_Theme_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-bulk-theme-upgrader-skin.php',
+	'Bulk_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-bulk-upgrader-skin.php',
+	'Gettext_Translations' => ABSPATH . WPINC . '/pomo/translations.php',
+	'NOOP_Translations' => ABSPATH . WPINC . '/pomo/translations.php',
+	'Language_Pack_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-language-pack-upgrader-skin.php',
+	'MO' => ABSPATH . WPINC . '/pomo/mo.php',
+	'Plugin_Installer_Skin' => ABSPATH . 'wp-admin/includes/class-plugin-installer-skin.php',
+	'Plugin_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-plugin-upgrader-skin.php',
+	'PO' => ABSPATH . WPINC . '/pomo/po.php',
+	'POMO_CachedFileReader' => ABSPATH . WPINC . '/pomo/streams.php',
+	'POMO_CachedIntFileReader' => ABSPATH . WPINC . '/pomo/streams.php',
+	'POMO_FileReader' => ABSPATH . WPINC . '/pomo/streams.php',
+	'POMO_Reader' => ABSPATH . WPINC . '/pomo/streams.php',
+	'POMO_StringReader' => ABSPATH . WPINC . '/pomo/streams.php',
+	'Theme_Installer_Skin' => ABSPATH . 'wp-admin/includes/class-theme-installer-skin.php',
+	'Theme_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-theme-upgrader-skin.php',
+	'Translation_Entry' => ABSPATH . WPINC . '/pomo/entry.php',
+	'Translations' => ABSPATH . WPINC . '/pomo/translations.php',
+	'wpdb' => ABSPATH . WPINC . '/wp-db.php',
+	'Walker' => ABSPATH . WPINC . '/class-wp-walker.php',
+	'Walker_Category' => ABSPATH . WPINC . '/class-walker-category.php',
+	'Walker_CategoryDropdown' => ABSPATH . WPINC . '/class-walker-category-dropdown.php',
+	'Walker_Comment' => ABSPATH . WPINC . '/class-walker-comment.php',
+	'Walker_Nav_Menu' => ABSPATH . WPINC . '/class-walker-nav-menu.php',
+	'Walker_Page' => ABSPATH . WPINC . '/class-walker-page.php',
+	'Walker_PageDropdown' => ABSPATH . WPINC . '/class-walker-page-dropdown.php',
+	'WP' => ABSPATH . WPINC . '/class-wp.php',
+	'WP_Ajax_Response' => ABSPATH . WPINC . '/class-wp-ajax-response.php',
+	'WP_Ajax_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php',
+	'WP_Automatic_Updater' => ABSPATH . 'wp-admin/includes/class-wp-automatic-upgrader.php',
+	'WP_Comment' => ABSPATH . WPINC . '/class-wp-comment.php',
+	'WP_Comment_Query' => ABSPATH . WPINC . '/class-wp-comment-query.php',
+	'WP_Date_Query' => ABSPATH . WPINC . '/date.php',
+	'WP_Embed' => ABSPATH . WPINC . '/class-wp-embed.php',
+	'WP_Error' => ABSPATH . WPINC . '/class-wp-error.php',
+	'WP_Http_Streams' => ABSPATH . WPINC . '/class-wp-http-streams.php',
+	'WP_Http_Curl' => ABSPATH . WPINC . '/class-wp-http-curl.php',
+	'WP_HTTP_Proxy' => ABSPATH . WPINC . '/class-wp-http-proxy.php',
+	'WP_Http_Cookie' => ABSPATH . WPINC . '/class-wp-http-cookie.php',
+	'WP_Http_Encoding' => ABSPATH . WPINC . '/class-wp-http-encoding.php',
+	'WP_HTTP_Response' => ABSPATH . WPINC . '/class-wp-http-response.php',
+	'WP_HTTP_Requests_Response' => ABSPATH . WPINC . '/class-wp-http-requests-response.php',
+	'WP_Meta_Query' => ABSPATH . WPINC . '/class-wp-meta-query.php',
+	'WP_Metadata_Lazyloader' => ABSPATH . WPINC . '/class-wp-metadata-lazyloader.php',
+	'WP_Network_Query' => ABSPATH . WPINC . '/class-wp-network-query.php',
+	'WP_oEmbed_Controller' => ABSPATH . WPINC . '/class-wp-oembed-controller.php',
+	'WP_Post' => ABSPATH . WPINC . '/class-wp-post.php',
+	'WP_Post_Type' => ABSPATH . WPINC . '/class-wp-post-type.php',
+	'WP_REST_Server' => ABSPATH . WPINC . '/rest-api/class-wp-rest-server.php',
+	'WP_REST_Response' => ABSPATH . WPINC . '/rest-api/class-wp-rest-response.php',
+	'WP_REST_Request' => ABSPATH . WPINC . '/rest-api/class-wp-rest-request.php',
+	'WP_Role' => ABSPATH . WPINC . '/class-wp-role.php',
+	'WP_Roles' => ABSPATH . WPINC . '/class-wp-roles.php',
+	'WP_Session_Tokens' => ABSPATH . WPINC . '/session.php',
+	'WP_Site_Query' => ABSPATH . WPINC . '/class-wp-site-query.php',
+	'WP_Tax_Query' => ABSPATH . WPINC . '/class-wp-tax-query.php',
+	'WP_Term' => ABSPATH . WPINC . '/class-wp-term.php',
+	'WP_Term_Query' => ABSPATH . WPINC . '/class-wp-term-query.php',
+	'WP_Theme' => ABSPATH . WPINC . '/class-wp-theme.php',
+	'WP_Upgrader_Skin' => ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php',
+	'WP_User' => ABSPATH . WPINC . '/class-wp-user.php',
+	'WP_User_Meta_Session_Tokens' => ABSPATH . WPINC . '/session.php',
+	'WP_User_Query' => ABSPATH . WPINC . '/class-wp-user-query.php',
+	'WP_Walker' => ABSPATH . WPINC . '/class-wp-walker.php',
+	'WP_Widget' => ABSPATH . WPINC . '/class-wp-widget.php',
+	'WP_Widget_Factory' => ABSPATH . WPINC . '/class-wp-widget-factory.php',
+);
Index: src/wp-includes/class-http.php
===================================================================
--- src/wp-includes/class-http.php	(revision 38348)
+++ src/wp-includes/class-http.php	(working copy)
@@ -7,7 +7,7 @@
  * @since 2.7.0
  */
 
-if ( ! class_exists( 'Requests' ) ) {
+if ( ! class_exists( 'Requests', false ) ) {
 	require( ABSPATH . WPINC . '/class-requests.php' );
 
 	Requests::register_autoloader();
Index: src/wp-includes/class-wp-embed.php
===================================================================
--- src/wp-includes/class-wp-embed.php	(revision 38348)
+++ src/wp-includes/class-wp-embed.php	(working copy)
@@ -384,4 +384,3 @@
 		return apply_filters( 'embed_maybe_make_link', $output, $url );
 	}
 }
-$GLOBALS['wp_embed'] = new WP_Embed();
Index: src/wp-includes/class-wp-error.php
===================================================================
--- src/wp-includes/class-wp-error.php	(revision 38348)
+++ src/wp-includes/class-wp-error.php	(working copy)
@@ -203,16 +203,3 @@
 	}
 }
 
-/**
- * Check whether variable is a WordPress Error.
- *
- * Returns true if $thing is an object of the WP_Error class.
- *
- * @since 2.1.0
- *
- * @param mixed $thing Check if unknown variable is a WP_Error object.
- * @return bool True, if WP_Error. False, if not WP_Error.
- */
-function is_wp_error( $thing ) {
-	return ( $thing instanceof WP_Error );
-}
Index: src/wp-includes/load.php
===================================================================
--- src/wp-includes/load.php	(revision 38348)
+++ src/wp-includes/load.php	(working copy)
@@ -394,7 +394,6 @@
 function require_wp_db() {
 	global $wpdb;
 
-	require_once( ABSPATH . WPINC . '/wp-db.php' );
 	if ( file_exists( WP_CONTENT_DIR . '/db.php' ) )
 		require_once( WP_CONTENT_DIR . '/db.php' );
 
@@ -1045,3 +1044,34 @@
 	 */
 	return apply_filters( 'wp_doing_ajax', defined( 'DOING_AJAX' ) && DOING_AJAX );
 }
+
+/**
+ * Check whether variable is a WordPress Error.
+ *
+ * Returns true if $thing is an object of the WP_Error class.
+ *
+ * @since 2.1.0
+ *
+ * @param mixed $thing Check if unknown variable is a WP_Error object.
+ * @return bool True, if WP_Error. False, if not WP_Error.
+ */
+function is_wp_error( $thing ) {
+	return ( $thing instanceof WP_Error );
+}
+
+/**
+ * @since 4.7.0
+ *
+ * @param string $class
+ * @return boolean
+ */
+function wp_core_autoloader( $class ) {
+	$classmap = require( ABSPATH . 'wp-classmap.php' );
+
+	if ( array_key_exists( $class, $classmap ) ) {
+		require_once( $classmap[ $class ] );
+		return true;
+	}
+
+	return false;
+}
\ No newline at end of file
Index: src/wp-includes/nav-menu-template.php
===================================================================
--- src/wp-includes/nav-menu-template.php	(revision 38348)
+++ src/wp-includes/nav-menu-template.php	(working copy)
@@ -7,9 +7,6 @@
  * @since 3.0.0
  */
 
-/** Walker_Nav_Menu class */
-require_once ABSPATH . WPINC . '/class-walker-nav-menu.php';
-
 /**
  * Displays a navigation menu.
  *
Index: src/wp-includes/pomo/mo.php
===================================================================
--- src/wp-includes/pomo/mo.php	(revision 38348)
+++ src/wp-includes/pomo/mo.php	(working copy)
@@ -7,9 +7,6 @@
  * @subpackage mo
  */
 
-require_once dirname(__FILE__) . '/translations.php';
-require_once dirname(__FILE__) . '/streams.php';
-
 if ( ! class_exists( 'MO', false ) ):
 class MO extends Gettext_Translations {
 
Index: src/wp-includes/pomo/po.php
===================================================================
--- src/wp-includes/pomo/po.php	(revision 38348)
+++ src/wp-includes/pomo/po.php	(working copy)
@@ -7,8 +7,6 @@
  * @subpackage po
  */
 
-require_once dirname(__FILE__) . '/translations.php';
-
 if ( ! defined( 'PO_MAX_LINE_LEN' ) ) {
 	define('PO_MAX_LINE_LEN', 79);
 }
Index: src/wp-includes/pomo/translations.php
===================================================================
--- src/wp-includes/pomo/translations.php	(revision 38348)
+++ src/wp-includes/pomo/translations.php	(working copy)
@@ -7,8 +7,6 @@
  * @subpackage translations
  */
 
-require_once dirname(__FILE__) . '/entry.php';
-
 if ( ! class_exists( 'Translations', false ) ):
 class Translations {
 	var $entries = array();
Index: src/wp-settings.php
===================================================================
--- src/wp-settings.php	(revision 38348)
+++ src/wp-settings.php	(working copy)
@@ -92,10 +92,9 @@
 // Load early WordPress files.
 require( ABSPATH . WPINC . '/compat.php' );
 require( ABSPATH . WPINC . '/functions.php' );
-require( ABSPATH . WPINC . '/class-wp.php' );
-require( ABSPATH . WPINC . '/class-wp-error.php' );
-require( ABSPATH . WPINC . '/pomo/mo.php' );
 
+spl_autoload_register( 'wp_core_autoloader' );
+
 // Include the wpdb class and, if present, a db.php database drop-in.
 global $wpdb;
 require_wp_db();
@@ -112,8 +111,6 @@
 
 // Initialize multisite if enabled.
 if ( is_multisite() ) {
-	require( ABSPATH . WPINC . '/class-wp-site-query.php' );
-	require( ABSPATH . WPINC . '/class-wp-network-query.php' );
 	require( ABSPATH . WPINC . '/ms-blogs.php' );
 	require( ABSPATH . WPINC . '/ms-settings.php' );
 } elseif ( ! defined( 'MULTISITE' ) ) {
@@ -133,44 +130,24 @@
 wp_not_installed();
 
 // Load most of WordPress.
-require( ABSPATH . WPINC . '/class-wp-walker.php' );
-require( ABSPATH . WPINC . '/class-wp-ajax-response.php' );
 require( ABSPATH . WPINC . '/formatting.php' );
 require( ABSPATH . WPINC . '/capabilities.php' );
-require( ABSPATH . WPINC . '/class-wp-roles.php' );
-require( ABSPATH . WPINC . '/class-wp-role.php' );
-require( ABSPATH . WPINC . '/class-wp-user.php' );
 require( ABSPATH . WPINC . '/query.php' );
-require( ABSPATH . WPINC . '/date.php' );
 require( ABSPATH . WPINC . '/theme.php' );
-require( ABSPATH . WPINC . '/class-wp-theme.php' );
 require( ABSPATH . WPINC . '/template.php' );
 require( ABSPATH . WPINC . '/user.php' );
-require( ABSPATH . WPINC . '/class-wp-user-query.php' );
-require( ABSPATH . WPINC . '/session.php' );
 require( ABSPATH . WPINC . '/meta.php' );
-require( ABSPATH . WPINC . '/class-wp-meta-query.php' );
-require( ABSPATH . WPINC . '/class-wp-metadata-lazyloader.php' );
 require( ABSPATH . WPINC . '/general-template.php' );
 require( ABSPATH . WPINC . '/link-template.php' );
 require( ABSPATH . WPINC . '/author-template.php' );
 require( ABSPATH . WPINC . '/post.php' );
-require( ABSPATH . WPINC . '/class-walker-page.php' );
-require( ABSPATH . WPINC . '/class-walker-page-dropdown.php' );
-require( ABSPATH . WPINC . '/class-wp-post-type.php' );
-require( ABSPATH . WPINC . '/class-wp-post.php' );
 require( ABSPATH . WPINC . '/post-template.php' );
 require( ABSPATH . WPINC . '/revision.php' );
 require( ABSPATH . WPINC . '/post-formats.php' );
 require( ABSPATH . WPINC . '/post-thumbnail-template.php' );
 require( ABSPATH . WPINC . '/category.php' );
-require( ABSPATH . WPINC . '/class-walker-category.php' );
-require( ABSPATH . WPINC . '/class-walker-category-dropdown.php' );
 require( ABSPATH . WPINC . '/category-template.php' );
 require( ABSPATH . WPINC . '/comment.php' );
-require( ABSPATH . WPINC . '/class-wp-comment.php' );
-require( ABSPATH . WPINC . '/class-wp-comment-query.php' );
-require( ABSPATH . WPINC . '/class-walker-comment.php' );
 require( ABSPATH . WPINC . '/comment-template.php' );
 require( ABSPATH . WPINC . '/rewrite.php' );
 require( ABSPATH . WPINC . '/class-wp-rewrite.php' );
@@ -182,36 +159,21 @@
 require( ABSPATH . WPINC . '/deprecated.php' );
 require( ABSPATH . WPINC . '/script-loader.php' );
 require( ABSPATH . WPINC . '/taxonomy.php' );
-require( ABSPATH . WPINC . '/class-wp-term.php' );
-require( ABSPATH . WPINC . '/class-wp-term-query.php' );
-require( ABSPATH . WPINC . '/class-wp-tax-query.php' );
 require( ABSPATH . WPINC . '/update.php' );
 require( ABSPATH . WPINC . '/canonical.php' );
 require( ABSPATH . WPINC . '/shortcodes.php' );
 require( ABSPATH . WPINC . '/embed.php' );
-require( ABSPATH . WPINC . '/class-wp-embed.php' );
-require( ABSPATH . WPINC . '/class-wp-oembed-controller.php' );
 require( ABSPATH . WPINC . '/media.php' );
 require( ABSPATH . WPINC . '/http.php' );
 require( ABSPATH . WPINC . '/class-http.php' );
-require( ABSPATH . WPINC . '/class-wp-http-streams.php' );
-require( ABSPATH . WPINC . '/class-wp-http-curl.php' );
-require( ABSPATH . WPINC . '/class-wp-http-proxy.php' );
-require( ABSPATH . WPINC . '/class-wp-http-cookie.php' );
-require( ABSPATH . WPINC . '/class-wp-http-encoding.php' );
-require( ABSPATH . WPINC . '/class-wp-http-response.php' );
-require( ABSPATH . WPINC . '/class-wp-http-requests-response.php' );
 require( ABSPATH . WPINC . '/widgets.php' );
-require( ABSPATH . WPINC . '/class-wp-widget.php' );
-require( ABSPATH . WPINC . '/class-wp-widget-factory.php' );
 require( ABSPATH . WPINC . '/nav-menu.php' );
 require( ABSPATH . WPINC . '/nav-menu-template.php' );
 require( ABSPATH . WPINC . '/admin-bar.php' );
 require( ABSPATH . WPINC . '/rest-api.php' );
-require( ABSPATH . WPINC . '/rest-api/class-wp-rest-server.php' );
-require( ABSPATH . WPINC . '/rest-api/class-wp-rest-response.php' );
-require( ABSPATH . WPINC . '/rest-api/class-wp-rest-request.php' );
 
+$GLOBALS['wp_embed'] = new WP_Embed();
+
 // Load multisite-specific files.
 if ( is_multisite() ) {
 	require( ABSPATH . WPINC . '/ms-functions.php' );
