refactor: replace inprocess setfenv with direct method injection.

Calling `setfenv` only affects the environment of the named
function; any subroutines it calls revert back to their default
environment if they were already declared.
* lib/specl/inprocess.lua (inject): New function, similar to
`table.merge`, but operate recursively and create missing
subtables in destination as necessary.
(call): Require that the main object have a new `inprocess`
field, and `inject` override functions into that environment
table.  Restore to original values when the main object returns.
Don't deepcopy the whole environment from whatever happens to be
in _G when called, just set the overrides, and let the main
object handle the details.
* lib/specl/main.lua: Set main.inprocess to _G.
* specs/inprocess_spec.yaml: Conform to the new `main.inprocess`
interface. Be careful that `before` blocks run in a different
environment to `example` blocks, so we have to pass the current
value of _G from each `example` block into the main constructor
in `before`.

Signed-off-by: Gary V. Vaughan <gary@gnu.org>