This is kind of a painful change, because a lot of code grew around the bad abstraction, but the goal here is to abstract formals in a way that allows adding other means of pattern matching / argument destructuring in the future. Change-Id: If4e681a4be3d1f42ceea81a8e07297f0d08acc80