Support for embedded servlet containers

Develop new EmbeddedWebApplicationContext (along with XML and
@Configuration variants) that creates and controls an embedded servlet
container. Unlike the traditional approach where a ContextLoaderListener
bootstraps Spring and creates a new WebApplicationContext, embedded
support expects that the EmbeddedWebApplicationContext will be created
directly.

The EmbeddedWebApplicationContext will become aware of a ServletContext
once the embedded container has been started. This will happen early,
allowing regular beans to call the getServletContext() method or
implement ServletContextAware.

The EmbeddedServletContainerFactory and EmbeddedServletContainer
interfaces provide a simple abstraction for creating, starting and
stopping the container. Any embedded container that supports Servlet
3.0+ initialization can be adapted. Implementations for Tomcat and
Jetty are provided.

The FrameworkServlet (and hence the DispatcherServlet subclass) is
now ApplicationContextAware. This allows FrameworkServlets to be
defined and used as Spring beans within the
EmbeddedWebApplicationContext.

Issue: SPR-10381