Topic/env step2

the semantics of Env.xyc for \step is very awkward when using, because \step directly jumps to the end value of a segment. this means that Env.xzc([[0, 0, \step], [1, 1, \step]]) will have the value 1 between time 0 and 1.
using \step2 instead of \step, the value between 0 and 1 will be 0, and it will jump to 1 at time 1.

step2 may be a bad name and i'm open for suggestions (maybe hold?).

the first two patches clean up the EnvGen ugen functions using templates and c++11 lambda functions, making the code more maintainable in future, if there is any