(portage-#20) Expand portage validation

This adds independent validation checks for package names and versions.
The version format has been modified slightly to join the comparison and
version string together.
Use ArgumentError over Puppet::Error for validation
(portage-#20) Extract version property in types

This splits up the package name and version field, so that versions can
be handled in a more intelligent manner.
Add in require for specs
(portage-#20) add portage parse_atom function

This adds a function for extracting portage atom components out of a
string. It also centralizes the portage regexes to class constants.
Allow the portage validation module to be included
(portage-#20) Implement :version in keywords and use

Since package_keywords and package_use already have more complex parsing
logic it's easier to do that parsing now. package_mask and
package_unmask will need more work.
(maint) Refactor code to be stylistically consistent.
(portage-#20) parse version for standalone packages
(portage-#20) Implement version parsing for mask/unmask
(portage-#20) Implement proper writing of versioned atoms
Shorten COMPARE_PATTERN regex for portage patterns
(portage-#20) Properly apply build_line to mask/unmask
Cleanly handle packages with no version string
(portage-#20) refactor all parsing into portagefile

The different classes had far too much duplication; all the parsing and
file manipulation has been centralized into the PortageFile class
Remove typo from format_atom method
Merge branch 'issue_20-version'
(portage-#22) Allow numeric values in package category
Merge branch 'issue_22-portage-numeric-category' into issue_20-version
(portage-#24) Fix permissions of newly created files