Make render invalidation smarter.

We only need to invalidate if:

- This is a shadow root
- This is a shadow host
- We are changing the select property
- We are a direct child of a shadow root (this is a bit too agressive)
- We are a direct child of a shadow host