new execsync via node-ffi with hack fallback

New implementation of execsync based on execsync-ng,
which is based on node-ffi.

execsync-ng is listed as an optional dependency.
This means that if node-ffi cannot be installed
or (on Windows machines) msvcrt.dll cannot be loaded,
the old hack approach will be used.

exec now takes another private parameter called _native
which defaults to true. If set to false, the hack
implementation will be used. This parameter is
not documented and is used only in test/exec.js
to run the tests against both the default and
the hack implementation.