Added some utility functions to testutils

Tried working out something to automatically test setters and getters,
not sure if it's really worth it though.

Added an Assert-style function
Added character.HasItem()

Also moved the check to ensure that we don't set hitpoints > health
into SetHitPoints() rather than Heal()

Also, added a check so that if the max health goes down we also lower
the hitpoint count. It panics due to the poor way the database objects
are managed at the moment.
Use pointer member for consistency
Started work on making unit tests more comprehensive
Fix the build
Refactor the way all of our database objects organize their data

Moved away from using a map to store individual fields and back to using
the much more type-safe and easy to manage member variables. Fixes a bunch
of run-time issues that can be now caught statically at compile time.

Also moves us much closer to being able to use a mark-and-sweep style database
update methodology rather than hammering the database with updates when
values change frequently.

Also broke dbobject out into its own file
Removed a bunch of dead/unused code in database.go

Also added some missing objType initializations
Got rid of compareStringLists()

Since I found out about reflect.DeepEqual which does the same job.

Had to modify piecesOf slightly to return a non-nil (but empty) list in the
trivial case rather than a nil one in order to make reflect.DeepEqual happy.
Tweaked the way database objects are constructed/initialized

The modified() call needs to be in the specific class that is being
created, not in the DbObject, so that we commit all of its fields in
the database, not just the ones in DbObject.

Also made it so we bypass the setter methods for initializing data
so that the entire object is initialized before we hand it off to
be committed to the database.