An Empirical Investigation of How and Why Developers Rename Identifiers