Cache "Rcode" too.

This allows use to cache NXDOMAIN and NODATA responses.
spin off cache in seperate directory
Adapt all callers to cache/cache.go

Fix up the new internal cache.go package.
add a boolean indicating a hit in the cache
Add some documentation
Put the cache check at the front of the function
Early on look in the cache.

Look in the cache right away. This also works for NXDOMAIN and NODATA
because we just key on the qname an qtype.
Merge branch 'nxdomaincache'