Add Generator class and support code

Generator is intended to be the preferred way to encapsulate Func building in user pipelines. This pull request probably could use more documentation, but the overall design and set of tests is solid enough to begin serious discussion.
Done

On Mon, Oct 13, 2014 at 10:42 AM, Andrew Adams <notifications@github.com>
wrote:

> In src/Util.h:
>
> > @@ -197,6 +197,16 @@ EXPORT bool ends_with(const std::string &str, const std::string &suffix);
> >  /** Return the final token of the name string using the given delimiter. */
> >  EXPORT std::string base_name(const std::string &name, char delim = '.');
> >
> > +/** Split the source string using 'delim' as the divider. */
> > +EXPORT std::vector<std::string> split_string(const std::string &source, const std::string &delim);
> > +
> > +#if __cplusplus > 199711L
>
> Yeah, split_string is probably good to leave in Util.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/halide/Halide/pull/506/files#r18783083>.
>