updates

done:
* added preliminary (untested) windows support
* updated assert statements to c++11 static_assert
* changed to asserted type-punning to allow any templated type

todo:
* write better windows documentation
* test windows support
* check that the type-pun assertion doesn't break anything (it
shouldn't)