Move the part of copying the observer's list from "notify()".

This approch is a pseudo "copy-on-write"
which is based on the assumption that all object's lifetimes are
handled by garbage collection. This is tricky approach.

* When adding an observer to the same topic (calling "add()")
  we don't copy the current list and add the add the observer
  to the current list. Although this is destructive,
  its operation add the observer to the end of list.
  So it does not effect to the current iteralated range
  of the list's length. It's would be safety.

* When removing an observer from the same topic (calling "remove()"),
  we copy the current list, modify it, and overwrite this object
  with it. Because to remove an observer from the same topic is
  destructive operation that will decrease the list's length.
  It is not safety. See "remove()" method.

* When removing the topic and observers related to it from this subject
  (calling "_removeTopic()" via "removeTopic()" or "destory()"),
  it's not safety. However, we don't make it safe.
  Because, it's bad approach that the observer calls "removeTopic()"
  with the topic which is passed to his "handleMessange".
  It should be handled in each observers with using "remove()",
  or the subject handle "removeTopic/destroy".