Add extension_info, as well as require new extensions to provide a version.

New extensions will be broken by this commit, but this can be fixed by implementing AbstractExtension.getVersion() in the lifecycle class, preferably returning a new SimpleVersion(major, minor, supplimental).