Add caching behavior for D3

Add a caching behavior that is similar in nature to the way the $http
service does it's own caching. Also uses the $cacheFactory service and
can be overridden by changing the defaults of the provider.