feature/wrapnotes

This feature fixes a text wrapping issue with the analysis text that appears below the staff. Sometimes the text is too long and overlaps the analysis associated with other chords. Unfortunately, canvas does not wrap text natively, so we have to use our own methods to a) wrap the text and b) position the wrapped text on the canvas.

This PR adds a utility function to wrap text and draw the result on the staff.

@jazahn or @MichaelDHilborn-Harvard  Can you review this when you get a chance?