Bug 879299: Add visibility_monitor to Contacts app

This commit significantly refactors how contacts are loaded and rendered in
the DOM.  Placeholder items are initially added to the list and then later
filled in when visible.  Images are lazy loaded as before, but will now be
removed when the contact is no longer visible.  Search has also been
refactored to help encapsulate the contacts_list and importer_ui internals.

NOTE: This pull request depends on changes currently in review in #10139.