Initial commit.
Basically took a bunch of stuff I had written previously and put it into a PCL.
Binding stuff needs re-examining.