fix(options): use watchCollection instead of simple watch to watch options collection

Using a simple watch to watch the options collection will cause a 'digest overflow' if a filter is used in options expression. The filter returns a new array on each digest lifecycle and the watch will fire each time. Using a watchCollection solves this issue.
watchCollection also has the advantage to be informed if an element is added to the collection. So the user of the directive won't have to assign a new array to update the options anymore.

Closes #6
fix(options): mark options as selected on change of options even if options are objects

Internal Option representation is an object which is created newly on each change of options collection. Array#indexOf with objects compares by reference and not equality. Because of that the option put into ngModel out site are not marked as selected.
By calculating and comparing hash codes of the option the directive is now independent of the kind of options.

Closes #7
chore(project): bump version to 0.4.4
chore(project): fix github repo url
docs(changelog): update changelog for 0.4.4
Merge branch 'hotfix/0.4.4'