Refactored all the code using template to support different time unit : Tick, Quarter, Second( not implemented yet)
I put all this template class in symusic.core and for convenience, we define some functions in symusic with multiple overloads for object creating, Like `symusic.Note`
Now, you can create object by adding time_unit, like `Note(1,1,1,1, "quarter")` or `Note(1,1,1,1, symusic.typing.Tick)`
Note that, although it looks like a duck type, there are still some different:
1. `Note` is a function, but not a class
2. The created object will belong to a class like `symusic.core.NoteTick`
3. `Note` in different class (like `NoteTick` and `NoteQuarter`) can not be directly converted (we'll design a converting system in the future)
v0.0.6-fix
optimize midi parsing performance
1. small vector optimization
2. reserve space based on byte num