Fix env handling in windows

Completely rewrite env handing for windows in luvi.  All code is now unicode aware and assumes UTF8 inside lua strings and WCHAR strings in C.

Also windows has the idea of hidden variables that are needed to do proper path resolving (see https://github.com/luvit/luvit/pull/510).  This adds a flag to `env.keys(true)` to include hidden keys when enumerating.
size should be a size_t