Index: src/wp-includes/class.wp-scripts.php
===================================================================
--- src/wp-includes/class.wp-scripts.php	(revision 37936)
+++ src/wp-includes/class.wp-scripts.php	(working copy)
@@ -276,6 +276,10 @@
 		$before_handle = $this->print_inline_script( $handle, 'before', false );
 		$after_handle = $this->print_inline_script( $handle, 'after', false );
 
+		echo '<pre>';
+		print_r( $obj );
+		echo '</pre>';
+
 		if ( $before_handle ) {
 			$before_handle = sprintf( "<script type='text/javascript'>\n%s\n</script>\n", $before_handle );
 		}
@@ -336,6 +340,9 @@
 		if ( ! empty( $ver ) )
 			$src = add_query_arg( 'ver', $ver, $src );
 
+		$async = isset( $obj->extra['async'] ) ? 'async' : '';
+		$defer = isset( $obj->extra['defer'] ) ? 'defer' : '';
+
 		/** This filter is documented in wp-includes/class.wp-scripts.php */
 		$src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );
 
@@ -342,7 +349,7 @@
 		if ( ! $src )
 			return true;
 
-		$tag = "{$cond_before}{$before_handle}<script type='text/javascript' src='$src'></script>\n{$after_handle}{$cond_after}";
+		$tag = "{$cond_before}{$before_handle}<script type='text/javascript' src='$src'{$async} {$defer}></script>\n{$after_handle}{$cond_after}";
 
 		/**
 		 * Filters the HTML script tag of an enqueued script.
Index: src/wp-includes/functions.wp-scripts.php
===================================================================
--- src/wp-includes/functions.wp-scripts.php	(revision 37936)
+++ src/wp-includes/functions.wp-scripts.php	(working copy)
@@ -254,8 +254,10 @@
  *                                    If set to null, no version is added.
  * @param bool             $in_footer Optional. Whether to enqueue the script before </body> instead of in the <head>.
  *                                    Default 'false'.
+ * @param  bool            $async     Optional. Adds the async tag to the script.
+ * @param  bool            $defer     Optional. Adds the defer tag to the script.
  */
-function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
+function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false, $async = false, $defer = false ) {
 	$wp_scripts = wp_scripts();
 
 	_wp_scripts_maybe_doing_it_wrong( __FUNCTION__ );
@@ -271,6 +273,14 @@
 		if ( $in_footer ) {
 			$wp_scripts->add_data( $_handle[0], 'group', 1 );
 		}
+
+		if ( $async ) {
+			$wp_scripts->add_data( $_handle[0], 'async', 1 );
+		}
+
+		if ( $defer ) {
+			$wp_scripts->add_data( $_handle[0], 'defer', 1 );
+		}
 	}
 
 	$wp_scripts->enqueue( $handle );
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php	(revision 37936)
+++ src/wp-includes/script-loader.php	(working copy)
@@ -397,6 +397,14 @@
 		'ariaHide' => esc_attr__( 'Hide password' ),
 	) );
 
+	$scripts->add( 'setup-config', "/wp-admin/js/setup-config$suffix.js", array(), false, 1 );
+	did_action( 'init' ) && $scripts->localize( 'setup-config', 'setupConfigL10n', array(
+		'show'     => __( 'Show' ),
+		'hide'     => __( 'Hide' ),
+		'ariaShow' => esc_attr__( 'Show password' ),
+		'ariaHide' => esc_attr__( 'Hide password' ),
+	) );
+
 	$scripts->add( 'language-chooser', "/wp-admin/js/language-chooser$suffix.js", array( 'jquery' ), false, 1 );
 
 	$scripts->add( 'user-suggest', "/wp-admin/js/user-suggest$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 );
