Resolve versionManagement configuration lazily and preserve exclusions

Previously, the versionManagement configuration was resolved as part of
the Boot Gradle plugin being applied. This meant that no dependencies
could be added to it and attempting to do so would result in a failure:
“You can't change a configuration which is not in unresolved state”.
This commit updates ApplyExcludeRules to wrap its processing in a
before resolve action. This defers the resolution of the
versionManagement configuration until one of the project’s other
configurations is being resolved. Fixes #1077

In addition to the above, the transitive exclusions that the Gradle
plugin provides were being lost if custom version management provided
a version for the same dependency. This commit updates
AbstractDependencies to preserve the exclusions from an existing
dependency declaration while using the version from the newer
dependency. This ensures that the exclusions remain while allowing
versions to be overridden. Fixes #1079
Test for message properties
Defensive null check in case Hibernate autoconfig is off

If the Hibernate autoconfig is not used to create an EntityManager
then I suppose it's possible that the JpaProperties might be null
when everything else is ready for the event to be published.

There's no test case because I think it's a corner case.

Fxies gh-1075
Add tests for switching message sources in tests

See gh-1075
Switch mergeDependencies to use a set.
Next development version
Fixup versions following release
Fix typo in reference docs appendix

Fixes gh-1082
Merge pull request #1082 from emalock3/patch-1

* patch-1:
  Fix typo in reference docs appendix
Add clarification of ddl-auto and schema.sql
Set Thread context class loader while Tomcat starts up

Fixes gh-1085
Add integration tests to check Gradle plugin's war packaging behaviour

There was a problem with the Gradle plugin packaging application
dependencies in WEB-INF/lib-provided when only the servlet container
and its dependencies should be packaged there. See #1064 for details.

This commit adds two tests, one for Tomcat and one for Jetty, to
verify that only the expected entries appear in WEB-INF/lib-provided.

Closes #1071
Catch application exception in tomcat starter thread and rethrow

Fixes gh-1088
Enhance JarCommand to support lists of includes and excludes

The lists are comma separated. In addition, user can add prefixes
"+" or "-", to signal that those values should be removed from the
default list, not added to a fresh one. E.g.

$ spring jar app.jar --include lib/*.jar,-static/** --exclude -**/*.jar

to include a jar file specifically, and make sure it is not excluded,
and additionally not include the static/** resources that would otherwise
be included in the defaults. As soon as "+" or "-" prefixes are detected
the default entries are all added (except the ones exlcuded with "-").

Fixes gh-1090
DataSource metrics

This commit adds an abstraction that provides a standard manner to
retrieve various information that are shared by most data sources.

DataSourceInfo is implemented by the three data source implementations
that boot supports out-of-the-box: Tomcat, Hikari and Commons dbcp.

This abstraction is used to provide two additional metrics per data
source defined in the application: the number of allocated
connection(s) and the current usage of the connection pool.

Additional DataSourceInfo implementations for other data source types
can be added very easily, check DataourceInfoProvidersConfiguration
for more details.

Fixes gh-1013