vm: Some fixes for subs assign nility,deref, circularity checks.
vm: Some fixes for subs assign nility,deref, circularity checks.

1: nested_list_check fails, then the else should set make sure S_IS_CIRCULAR
is unset, in case it was set previously.

2: If the list contains objects, and the rhs is an object, check for the
object value being refcounted AND circularity before derefing.

3: Lists containing non-objects may need to do a ref regardless of how flags
are. So use flags to check for a deref, then continue. Consider this:

str nil_s
list[str] ls = [nil_s]
ls[0] = "str"

The code previously checked that the initial flags were 0 before doing a ref.
This resulted in "str" not getting a ref, but the list marking it as non-nil
(which caused an extra deref).

These were caught by randomly running valgrind on sanity.ly.

FascinatedBox/lily,FascinatedBox/lily,jesserayadkins/lily,jesserayadkins/lily,FascinatedBox/lily,jesserayadkins/lily,FascinatedBox/lily