Introduced mojo execution guice component scope

Mojo execution scoped components are annotated with @MojoExecutionScoped
They are created just before configured mojo instance is created
and disposed immediately after mojo execution finishes.

Execution scoped components can request @Inject MavenSession,
MavenProject and MojoExecution instances in addition to any
standard Maven core components and components defined in
maven plugin contributing execution scoped components.

Execution scoped components can be injected into Mojos using
standard /* @component */ javadoc (and likely new mojo
annotations).

If execution scoped component implements Committable callback
interface, its commit() method will be invoked after successful
mojo execution.

If execution scoped component implements Disposable callback
interface, its dispose() method will be invoked after either
successful or failed mojo execution.

Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>