pprust: Refactor to emit tokens easily

TODO: describe what I did

This patch also makes several comma-list break work with inconsistent
rule. For example,

    Struct{t1: 1,
           t2: 2,
           t3: 3,
           t4: 4,}

becomes

    Struct{t1: 1, t2: 2, t3: 3,
           t4: 4,}
uncompilable