adding dom3 support

dom level 3 has mutation events, which aren't nearly as performant as the observer approach, should still be a bit faster than polling