Protection against unintentional uses of JS::Value with AssignOrToJSVal

Read the comment for a detailed description. SetProperty now also can't be used with unrooted JS::Value types anymore.
Additional rooting and CScriptVal replacements