Made IPAddress cache the text representation of the address
Cleaned up getDiffString() in IPDBField, StringDBField, InvidDBField.

Fixed a bug in IPDBField that was causing IP vectors to improperly
calculate IP addresses deleted from a vector field.

Made IPDBField's implementation use localization resources like the
others to generate the diff message text.

IPDBField uses a comma and a space to separate items added or deleted
from an IPDBField like the others now, rather than a plain comma.

Tiny optimizations to all three.  StringBuilders are not created unless
they are going to be used, and VectorUtils.vectorString() is used instead
of a custom implementation in the StringDBField case.