use ||= in Interval#tone_semitone to cache value
use ||= in Note#accidental to cache value