Improved ListView performance: lazily add elements to the DOM

After measurements: I found out that we had a `_container.clientHeight` left, which did nothing, just computing size. It was done at every stage of the loop and was expensive overall.

Also, after removing the line describe above, in the measurement, the top expensive operation was adding items to the DOM. Then, I changed the listview to add effectively items to the DOM only when they were visible, which means that it needs to listen to the scroll events to update the DOM.

review: @devoncarew

Fixed #2737
It seems like its legal for `separator` to be null. `separatorY