Codegen refactor to move compiler outputs behind an interface

Here's an attempt at refactoring the various compiler output types behind an interface. The long term goal of this is to enable adding new types of compiler output without modifying Halide itself.

The main change is to add a general Func::compile_to, which accepts a new type Output, which is just a thin wrapper for a pointer to an OutputBase. OutputBase is implemented by various classes to support the different types of compiler outputs (Bitcode, Object files for now).

I'm not completely happy with a lot of this, and there are a few things that need addressing. I'm going to add a few comments on these.

BTW, note that this is a PR to Zalman's PR #560, not master.
Agreed. I'm actually tempted to remove the checking, the next step out toward the edge is to the Func::compile_* functions, which have a default target that should be reasonable. I'm not sure we are doing users a favor to compile bad targets to the host target, since the user has to go out of their way to get to a bad target in the first place.