add `opts.compiler` allows third party to override the internal compiler

I read the comments that @lazd made in other posts. Here is my version of rolling out the User custom compiler. 
I'd change this to:

> Custom compiler function. By default, the `precompile` method of the provided Handlebars module is used (see [`options.handlebars`](#optionshandlebars)).

As the actual compilation method is not the latest stable version, but the property of the Handlebars module provided.