Fix #34 correct checksum caculation when IPv6 extension headers being used

This pull request addresses the issue reported in #34.
The reason is that for checksum calculation in IPv6, the upper layer protocol is assumed to follow directly after the IP header. But when extension headers are used, the IPv6 header becomes longer and the upper layer protocol is shifted back. Hence the upper layer protocol checksum calculation has also to be shifted accordingly.