+lua.channels is a module that provides safe means of transporting complex Lua values
+between independent states.
+The main concept is a channel - a multiple producer-single consumer queue, that is also
+a Lua userdata to be used from script.
+There can be only single receiver point, located in a state where it was originally created
+Contrary, there can be multiple sender points, placed manually in other states or sent via
+The main idea is when you send original channel via other channel, you'll automatically get
+0. There's no "peek" and will not be. If you receive message, it's removed from queue.
+1. Only non-executable Lua data can be sent over channels; functions and coroutines aren't allowed
+to be sent. This is because saving and restoring full function context is a rather complex task
+2. Fat userdata objects should have "__channel__" metamethod to be transferred over channel;
+if metamethod is not found, then sender state receives Lua error.
+3. __channel__ should follow contract:
+a) serialize values from Lua
+parameter 1: fat userdata to be transferred; it's an object to which metatable is attached
+return 1: standalone clone of original fat userdata as a light userdata
+b) deserialize values back to Lua
+parameter 1: light userdata received from serialization stage
+return 1: fat userdata constructed from parameter 1
+notes: incoming light userdata should be deallocated in the process