Ensure `ProxyListLoader` reflects current object state

* Previously, `ProxyListLoader` could emit an incomplete list of objects
  if the binding was created *after* the creation of the list item, but
  *before* the completion of the `refresh()` of the `binding.instance`
  object.  E.g., `ProxyListLoader` would initialize with the attribute
  list, and then that list would be updated with an already completed
  object.
* Now, `ProxyListLoader` will listen for events on the relevant
  attribute of the `binding.instance` object, and merge results with its
  own list.
* Also added deduplication to avoid multiple `binding.mappings` entries.