Add more string methods to LilyString

Some low-hanging fruit to improve string-like behavior
Improve LilyString class

- Add split function similar to the string implementation
- Make append private (mutating methods should all be private)
- Rename PrettyPrinterError to LilyStringError
- Add a few more low-hanging string methods
- Flatten LilyString in more locations (ideally it should always be perfectly flattened, more investigation and unit tests are needed to confirm this.)