Feature softserial

Preview of softserial code is here

This pull request is only for reference, do not merge it. I'll rewrite history in my branch.