Fix pretty printing of parentheses in types
Some types generate superfluous parentheses:
#print_type ('a | 'b ) \'c;;
(('a | 'b) \ ('c))
And some others are missing parenthses:
#print_type (Int -> Int) & (Bool -> Bool);;
Bool -> Bool & Int -> Int
# #print_type Bool -> Bool & Int -> Int;;
Bool -> Arrow
here we cannot paste the output of the toplevel.