Use a ServiceLoader-like mechanism for language and component discovery [fixes #7]

Having multiple wunderboss.properties doesn't work very well when
creating an uberjar, since all of the files have to be merged in to
one. This commit changes the language and component lookup mechanism to
work in a fashion similar to java.util.ServiceLoader.

ComponentProvider discovery works by looking for a resource called
META-INF/wunderboss-providers/the.full.name.of.the.requested.Interface,
which must contain a single line: the fully-qualified name of the
ComponentProvider implementation.

Language discovery works the same way, except it looks for
META-INF/wunderboss-languages/language-name.

You can override this lookup (as we do in WildFlyService) by registering
a provider with the interface it services as the key.

We can't use ServiceLoaders since they require the looked-up service to
be an implementation of the requested class, and we need to load a
ComponentProvider that can *create* an instance of the requested
class. Also, ServiceLoader isn't useful for loading language
implementations.