Add BNF Grammar for valid version strings

Written in collaboration with @petermichaux

Closes #110
Improve BNF grammar

Better names, more intuitive ordering.
bnf: Simplify 'alphanumeric identifier'
bnf: Remove unused 'letters', 'non-digits'

via: @EddieGarmon
Merge pull request #116 from isaacs/bnf

Add BNF Grammar for valid version strings