In the Client, DataSetting.setThing() is deeply suspicious

(Bug, Investigate , Priority: High, Test Status: No automated tests yet , Reported By Justin du Coeur, )
Summary: It's side-effecty; worse, InputGadget.thingId usually relies on it. It's a nasty code smell, and I've already encountered serious bugs caused by it. We should instead be rigorously setting data-thing explicitly when needed.
This is going to be a pain in the ass to fix. The first step is probably going to be changing InputGadget to not use thingId, and throw a clear exception instead, but that's going to cause a fair amount of havoc, and require a lot of testing and fixing.