Cleaned up memory usage, Using macros to define songs

The memory for the notes is now allocated as a static array. This helps
avoid memory exhaustion. Also macros are used now to define the notes,
resulting in somewhat tighter song definitions (though less expressive,
since for loops cannot be used).