Refactor stash
As we recently discovered, Tarantool has a peculiarity - when calling stored procedures with
{language = "C"} option, it disregards the shared object (.so / .dylib) already loaded by Lua
and makes the second independent dlopen. As a result, Lua and C stored procedures can't share
state, because even static variables point to different memory locations.
As a workaround, this patch provides the API for hiding the state inside lua_State. Under the
hood, the stash consumes a custom struct and leaks the wrapping box. Inside Lua, it's represented by
a userdata, which the access() function provides access to.