make TTL work

fixes #1068 

It lacks tests, but is able to work well.
i wanna get some feedback for this implementation, and I am adding tests for it now.
if use the pointer here, external change on `Ready.SoftState.XXX` will impact the value of `prevSoftSt`. To make things clear, I use the struct here.