Understanding Virtual Nodes: Oversmoothing, Oversquashing, and Node Heterogeneity