Bug 724632 - Detraitify

This is another attempt to kill all traits with fire! Although this time I'm less ambitious and just trying to replace traits with Class and private property trickery with symbols. Unfortunately it's nearly impossible to land this change in chunks because there are few common traits shared between many APIs. Since it's also would be inhumane to review the whole thing (this pull) I'm going to use following strategy. Create pull request for each small component that has tests that pass. We won't be able to land those pulls separately as that would break users of that component, but this way we could verify review and verify each peace & and aggregate all changes in this pull. Once all pieces are r+ and all tests pass in this pull we can land it.

Still there is still at least one piece that may land separately so I'm going to create two sections here where I'll link changes for the pieces this pull request contains.


## Standalone things that can land

- #1724

## Pieces that are coupled

- #1725