SPI approach for pluggable implementations. (#2414)

Adds the ability to add pluggable implementations for defined Service Provider Interfaces (SPI). The implementation to load is chosen via configuration.

First set of plug-points are:
- ArtifactStoreProvider
- MessagingProvider
diff --git a/tests/src/test/resources/application.conf b/tests/src/test/resources/application.conf
new file mode 100644
index 0000000..3dbdb36
--- /dev/null
+++ b/tests/src/test/resources/application.conf
@@ -0,0 +1,8 @@
+
+whisk.spi {
+  DependentSpi = whisk.spi.DepSpiImpl
+  TestSpi = whisk.spi.TestSpiImpl
+  SimpleSpi = whisk.spi.SimpleSpiImpl
+  MissingSpi = whisk.spi.MissingImpl
+  MissingModule = missing.module
+}