improve the notation language

Now the notation language supports:
- name[contents] - constant declarations
- ^ - note reduplication operator
- x - lengthening note duration operator
- . - dotted note modifier.
- t - triplet note modifier
- tNumber - transposition modifier

Add Transpose method that can transpose a given melody up and down by a
constant interval.
Rewrite GetKeyNumber method and rename it into GetSemitones. Now it can
handle CB and B# notes.
Add GetNote method.