Move package attribute ID definitions to a separate file

... <package/hpkg/PackageAttributes.h>, which also defines other
properties (name and type) for each attribute. It does so via a macro
that the caller can define to generate whatever code is desired.
ReaderImplBase: Verify that the attribute type matches

... the one expected for the respective attribute. Before it was
possible that e.g. a uint was read and then interpreted as a
const char*, if a string was expected for that attribute.
Move package info parser to its own file
Move package info string builder to its own header
ReaderImplBase: Fix copy and paste oversight
BStringList: Declare Join() const
BString: Add Split()
hpkg format: Add attributes for declaring users and groups
WriterImplBase: Some simplifications

... using the recently introduced _AddStringAttribute[IfNotEmpty]().