Improve API for consistency; add hasDetail(); change label generation

Ensure all fields have setters/getters.

Ensure SeasidePerson::DetailType includes all detail types.

Include middle name in display label if firstName is not present.
Also, if nickname is available, use it as the label instead.