Perf regression fix

The switch to `data-reactid` really messed up our "first update" performance. Once the cache was warmed perf was fine, but initial render perf was really, really slow. This is probably why we didn't spot this since we average over 1000s of runs.

This diff goes back to using the `id` attribute, and falls back to the DOM walk/`data-reactid` strategy if the user provides an `id` attribute. Tests coming soon.