fix opts reference issue when renderFile is rapidly called asynchronously

The local `opts` argument somehow references the same object if `renderFile` is rapidly called asynchronously. This causes the very last call's `opts` argument to be passed into the compiler for every single function call, instead of each call's discrete set of arguments. We need to deep clone the object to break the reference.