Sync ssot

Placeholder, needs more tests and comments. 
Fixes #1919 #1814 #2057 #2191 #2177 #2125 #2100 #1848 #1790 #1532 #1389 #1308

if members is not always accessed, it might be nice to create it lazily. (if its needed always then just leave its allocation in the constructor)

something like:

`this._members = undefined` in the constructor

members: function() {
  var members = this._members;

  if (members === undefined) {
    members = this._members = new Ember.OrderedSet();
  } 
  return members;
}
```