Loads an application. This is responsible for instantiating an application given a context.
Application loaders are expected to instantiate all parts of an application, wiring everything together. They may
be manually implemented, if compile time wiring is preferred, or core/third party implementations may be used, for
example that provide a runtime dependency injection framework.
During dev mode, an ApplicationLoader will be instantiated once, and called once, each time the application is
reloaded. In prod mode, the ApplicationLoader will be instantiated and called once when the application is started.
Out of the box Play provides a Guice module that defines a Java and Scala default implementation based on Guice,
as well as various helpers like GuiceApplicationBuilder. This can be used simply by adding the "PlayImport.guice"
dependency in build.sbt.
A custom application loader can be configured using the play.application.loader configuration property.
Implementations must define a no-arg constructor.
Load an application given the context.