refactor(select): reduce duplication and reorder functions
fix(select): throw for selectAs and trackBy

trackBy and selectAs have never worked together, and are fundamentally
incompatible since model changes cannot deterministically be
reflected back to the view. This change throws an error to help
developers better understand this scenario.