Enhance extension failure reporting

Previously if an exception was raised the exception would not be
reported.  Additionally, if a command failed a large message would be
built but thrown away as soon as build_error was reached.

Now a small exception message is raised for the original error and this
message included in the build report.

This will make determining build failures easier.
Include exit reason in build failure message

This will make it easier to determine why extension building failed.
Compile missing extensions during installation

After #596 if a user installs a gem into a shared repository any missing
extensions in dependency tree should be installed at the same time.

This should reduce the amount of compiling required during activation,
and may make compiling during activation unnecessary (but I will need to
check it.