Proper std::ref semantics

This pull request ensures proper `std::ref` semantics and makes `get` and `set` on `table` obey those semantics.

A `sol::ref` type was added to make the `lua.get<sol::ref<T>>` less painful than `lua.get<std::reference_wrapper<T>>` syntax, and `sol::ref<T>` is just a using alias for `std::reference_wrapper`.