Partial env bug fixes

Currently `partial` passes `(current-env)` to `render` resulting in a new `struct:environment` with the old env in its `frames` field. This can cause errors inside `dict-ref` for the environment when it tries to call `dict:has-key?` on the wrapped environment, e.g. this happens when the partial references a name not in the original dict.

This fix adds `dict-has-key?` to `struct:environment` so that the nested environments work without erring.

I tried just passing the old env through on partials instead but it causes issues because in the context of the partial the env from the parent template is technically a different struct type.