fix #1019 MultiAutoComplete data model update and onchange listener

This commit fixes an issue with the onchange handler not being
called properly when removing options with the close button.
It makes sure the data model is updated properly, and the onchange
listener is called, and called only once when there is a change
in the widget value.

Before this commit, the checkValue method on widget controllers
was called in 2 different cases (for widgets with a drop down popup):
- when a new value comes from the data model bound to the widget
- when a value is selected in the drop down popup.

For the MultiAutoComplete, those two use cases have to be handled
differently, especially because the type of the value is different
(an array of objects in the first case and a single object in the
second case). So, this commit introduces a new method, called
checkDropdownValue, which is now called instead of checkValue in
the second case. This simplifies the code and makes it easier to read.

This commit also moves some code from the widget to the controller to
make the code of the MultiAutoComplete more consistent with other
widgets.

Also, this commit fixes some other issues linked to the "expando"
mode (now the popup stays open to allow checking and unchecking several
options).

Close #987