Restructure packages

Improve package structure and attempt to co-locate related classes.
Consistent use of Ordered constants

Prefer Ordered HIGHEST_PRECEDENCE and LOWEST_PRECEDENCE constants to
Integer MAX_VALUE or MIN_VALUE.
Ordering of Application Initializer and Listeners

Update javadoc and method names to indicate that ApplicationInitializer
and ApplicationListeners are `Order` sorted before being invoked.

Also remove specific sorting from SpringApplicationBuilder, relying
instead on the Order sorting.

Fixes gh-316
Improve Mongo auto-configuration

Disable Mongo auto-configuation when @EnableMongoRepositories is used
and adapt the test helper classes accordingly.

Change the property prefix and dependency management version property
from `...mongo` to `...mongodb` for consistency with Spring Data.

Fixes gh-315
Extract Mongo auto-configuration from Spring Data

Extract Mongo auto-configuration classes from Spring Data specific
auto-configuration, allowing Mongo to be used without Spring Data
if require.
Extract inner configuration property classes

Extract all inner @ConfigurationProperties classes from @Configuration
classes for consistency.
Don't eagerly initialize FactoryBeans

Fix `EmbeddedServletContainerAutoConfiguration` so that it does not
accidentally eagerly initialize factory beans.

Fixes gh-306
Add SpringApplication.setRegisterShutdownHook

Add a setRegisterShutdownHook option to SpringApplication allowing the
shutdown hook to not be registered.

Also update SpringApplicationBuilder to automatically disable shutdown
hooks for child contexts.

Fixes gh-314
Document that applicaiton.yml requires snakeyaml

Update documentation to reference the need for a yaml library to be on
the classpath.

Fixes gh-313
Merge pull request #313 from madorb/master

* pull313:
  Document that applicaiton.yml requires snakeyaml
Prevent 404s in README.md links

Fix links to ensure that they don't cause 404 errors when published to
Github Pages.

Fixes gh-304
Merge pull request #304 from adambro/patch-1

* patch-1:
  Prevent 404s in README.md links
Polish
Apply source cleanup and formatting
Add mainClass option for Repackage task

Add `mainClass` property option to the Repackage task. If the property
is defined within a task, it works in the same way as if it defined
within the springBoot{} 'ext' properties section.

Option is valid only for that specific task where it is defined, and
will override option defined in springBoot{} ext properties.

Fixes gh-283
Merge pull request #302 from jvalkeal/gradle-mainclass

* gradle-mainclass:
  Add mainClass option for Repackage task
Polish gradle repackage task formatting
Update gradle example builds
Move remaining properties for consistency