Refactor, improve Multipart model

refs #15674
As @hseeberger commented, making these `private` makes them inaccessible from the companion object. I guess the simplest solution would be to make them `private[BodyPart]`.