Add parentheses in genericPrint according to path.needsParens().
Handle UnaryExpressions in Path.prototype.needsParens.
Handle simple BinaryExpressions in Path.prototype.needsParens.

Dealing with precedence will come later.
Handle {Assignment,Conditional}Expression in Path.prototype.needsParens.
Handle numeric member expressions in Path.prototype.needsParens.
Deal with BinaryExpression operator precedence in needsParens.
Resolve {Function,Object}Expression ambiguity with parentheses.
Return early from needsParens when path.node is not an Expression.