Clean up surface.go

Fixes some obvious bugs (wrong bitmasking, wrong opaque value, lack of struct tags) and cleans up the file.