JS update

I am sorry for breaking the tests, but the spinner is one tough enemy :)

* figured out the proper spinner detection (lightbox zoomed widget had made spinner_div to appear visible although it was not)
* moved whole spinner detection into JavaScript (faster)
* added "library file" that we can put our JS shortcuts in to not pollute python source.
* slight code cleanup (always use module's `execute_script`)
* fixed widget's footer getter (did not properly react on `Never` state)
Not at all important, but `textwrap.dedent` is handy here:
ajax_wait_js = dedent("""
...
""")
```