Add tests to detect new_variable_* overriding previously set values

[davidben@mit.edu: Fix some nits]
Make the fullvar variable test more reasonable

Calling set on the output of get really should a no-op. Also test that
the new version of the setters were installed.
Don't g_value_unset an uninitialized GValue

Silences a GObject assertion.
When replacing a variable, keep the old value

This unbreaks variable behavior on module reload.

Reported-By: Robert Jacobs <rnjacobs@mit.edu>