adding parseMessageOther

Retooling functions to break them up into parseMessageFinal and
parseMessageOther (instead of getNextHop). This way parseMessageOther
can also do non-zone caching.
allowCacheResponse()

I'm tired of demuxing the Message instanceof, so i created a boolean
that says whether a direct cache-hit can be returned (or if the owner
must get the message either way)
findNextHopFull

This gives the full-name of the next entry in the tree. Useful for
comparing to cache-hits to find the best match.
quick fix

(in case findBestMatch is given a null array)
SGS::parseMessageOther

first-draft of parseMessageOther. This function is for
non-exact-matches and compares the tree-next-hop to a group-specific
cache for better hits
set up ServerGroupServer caching

moved from ArrayList to key-value pairing by record name. Note that I
also had to fix a HUGE bug in Registration.java for this to work!
big bug-fix here too!

Had to do a quick fix of a copypasta bug
function writing

Writing necessary functions in IGS to translate DNS UPDATE records to a
FERN Registration object
isExactMatch

I should (eventually) migrate this as a class-function of Message (so I
can overwrite it instead of using instanceof)
debug printlns
quick bugfix

should also rearchitect this eventually
parseRegistrationResponse

function was only prototyped and always returned null!