Drop unnecessary code, some error checking and rearrangements

As i was looking into adding some tests for ```session.go``` functions i stumbled upon the following interesting parts of code:

* ```frameSender()``` never sends anything down to the ```done``` channel if it normally ends. 
* ```receive()``` is unnecessary as it allocates a frame and an error every time it's called and returns them to the ```frameSender()```, while we can easily call ```readFrame``` inside ```frameSender()``` without the extra allocation. Handling of the ```io.EOF``` can also easily be done inside ```frameSender()```. I guess with profiling this allocation issue would be more obvious.
* Drop of ```isConnReset``` since 1) disconnection is still a connection error and 2) it is treated just like other connection errors.