Truncate long service display names

Long service display names were overflowing on the canvas, particularly for ghosted charms, which have opening and closing parens plus an uncommitted icon taking up additional space. Truncate appropriately and provide a tooltip with the full name.
All of the logic in the getter is tested in the unit tests I added. I thought a bit about moving the truncate function out but couldn't justify it. It's not used any other place in the class. Keeping it here keeps the logic close to where it's actually being used. The only reason it exists as a function at all is that I needed to truncate to different lengths depending on whether or not the service is ghosted.