change how context attributes are handled

Pretty much implements #1 but instead of putting subject on `this` its passed as the sole argument to the `chooseFn`. Feels pretty good, a lot fewer `apply`s