Initial work on adding profiling tests.
Fix tests.

In the previous commit, the mock connection object was refactored to use a real
Strophe.Connection object.

This caused a test in spec/controlbox.js to fail (due to a method that was now
no longer mocked).

Added a quick workaround (via monkeypatch) for now.
Add an outline to the profiling tests.
Performance fix. Debounce the update method on the roster.
Don't add test users alphabetically, but rather randomly
More optimizations.

Don't sort the global ContactRosters collection (we only need to sort the
individual groups).
Only add the roster to the DOM once the users have been added.
Minimize debounce time for update method to 100ms.
Add another profiling method for adding users without groups
Performance fix. Set display "none" on the roster element.
Some refactoring. Add showInRoster method

which checks if a contact should appear in the roster (depends on
show_only_online_users setting)
bugfix in positionGroup.

Index must always be 0 if there aren't any group elements in the dom yet.
Make sure that subscribeToRosterSuggestions is ...

called sequentially with enough time between each call.
Bugfix. .roster-group elements must be found relative to
Keep on getting disconnected. This fixed it.

Seems like the RID gets incremented once too many (outside of upper bound of
expected window), and then server responds with item-not-found.

See: http://xmpp.org/extensions/xep-0124.html
Performance fix. Don't loop through whole roster when only one item changed. updates #151
Performance fix. Don't query for the roster on each page load.

Instead, just populate the roster from sessionStorage if available.
Keep a local customized copy of strophe.roster.js

The new changes made to strophe.roster.js are incompatible with the way
converse.js works.

Will likely replace strophe.roster.js completely.
Fix tests
Fix github url to use https instead of ssh
Use mainConfigFile option to avoid having to configure paths again.