Codegen refactor 2

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.
This is removed and doesn't have any replacement functionality. I'm hoping that we can just have PNaCl users build bitcode outputs instead of native outputs, otherwise, it is quite difficult to separate the behavior of the outputs from the target.