Add BNF Grammar for valid version strings

Written in collaboration with @isaacs and @petermichaux

Closes #110

Closes #116