Add SignalProxyObject

SignalProxyObject acts as a lazy object signal resolver,
so we can define signals for objects in views that doesn't exist.
It also allows to switch the object by doing:

  view.widget = new_widget

Which will disconnect the signals for the old object and connect
the ones for the new.

Change-Id: Ibd46890d7afaf30348aeb2f5e3b052e93732d016