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.