Add mechanism to automatically load additional projects

This adds an extras.d directory to contain startup scripts that
stack.sh runs automatically at the end.  Similar to local.sh
except the scripts are sourced into the stack.sh process rather
than executed as a child process.  This gives them complete
access to the stack.sh environment.

Convert Tempest to use this format as an example.

Change-Id: Ibc95e6aaecf4211da948319eb452293ae4357780
diff --git a/stack.sh b/stack.sh
index 9f734b9..5330099 100755
--- a/stack.sh
+++ b/stack.sh
@@ -321,7 +321,6 @@
 source $TOP_DIR/lib/ceilometer
 source $TOP_DIR/lib/heat
 source $TOP_DIR/lib/quantum
-source $TOP_DIR/lib/tempest
 source $TOP_DIR/lib/baremetal
 
 # Set the destination directories for OpenStack projects
@@ -775,9 +774,6 @@
 if is_service_enabled ceilometer; then
     install_ceilometer
 fi
-if is_service_enabled tempest; then
-    install_tempest
-fi
 
 
 # Initialization
@@ -1314,16 +1310,6 @@
     screen_it baremetal "nova-baremetal-deploy-helper"
 fi
 
-# Configure Tempest last to ensure that the runtime configuration of
-# the various OpenStack services can be queried.
-if is_service_enabled tempest; then
-    echo_summary "Configuring Tempest"
-    configure_tempest
-    echo '**************************************************'
-    echo_summary "Finished Configuring Tempest"
-    echo '**************************************************'
-fi
-
 # Save some values we generated for later use
 CURRENT_RUN_TIME=$(date "+$TIMESTAMP_FORMAT")
 echo "# $CURRENT_RUN_TIME" >$TOP_DIR/.stackenv
@@ -1333,6 +1319,16 @@
 done
 
 
+# Run extras
+# ==========
+
+if [[ -d $TOP_DIR/extras.d ]]; then
+    for i in $TOP_DIR/extras.d/*.sh; do
+        [[ -r $i ]] && source $i stack
+    done
+fi
+
+
 # Run local script
 # ================