introduce PackageName and NormalizedPackageName domain concepts

I thought it would be small, but `PackageName` is used through almost whole code base.

related to #351

Any feedback is welcome.