add syntactic extractor for assignment-like trees

There are three kinds of assign-like trees:

1. Assign(lhs, rhs)                          // $lhs = $rhs
3. AssignOrNamedArg(lhs, rhs)                // $lhs = $rhs
2. Apply(Select(f, nme.update), args :+ rhs) // $f(..$args) = $rhs

New syntactic combinator unifies all of them and lets users not to think
about these implementations details.