add private, safe methods for strings
hooray, header guards
use safer string functions
print components correctly
parse specs with "v" or spaces at the start
add range-related code