Implement custom options filtering

An example of server side filtering :+1: 
```java
public class ServerSideResultFilter implements ResultsFilter {
        private boolean initialized;
        private final TagProxy tagProxy;

        public ServerSideResultFilter(TagProxy tagProxy) {
            this.tagProxy = tagProxy;
        }

        @Override
        public void filter(final String searchText, final ChosenImpl chosen, boolean isShowing) {
            if (isShowing && initialized) {
                return; // do nothing, keep the last results
            }
            initialized = true;

            tagProxy.filterTags(searchText, new MethodCallback<List<Tag>>() {
                @Override
                public void onSuccess(Method method, List<Tag> tags) {
                    List<SelectItem> selectItems = chosen.getSelectItems();
                    selectItems.clear();

                    for (Tag tag : tags) {
                        OptionItem optionItem = new OptionItem();
                        optionItem.setHtml("<div>" + tag.getLabel() +"<span class=\"count\">" + tag.getCount() +"</span></div>");
                        optionItem.setText(tag.getLabel());
                        optionItem.setValue(tag.getLabel());
                        optionItem.setArrayIndex(tag.getId());
                        optionItem.setDomId("myOption_" + tag.getId());
                        
                        selectItems.add(optionItem);
                    }

                    chosen.rebuildResultItems();
                }
            });


        }
    }


//...

ChosenOptions options = new ChosenOptions();
options.setResultFilter(new ServerSideResultFilter(tagProxy));
ChosenListBox chzn = new ChosenListBox(true, options);

//...
```