customize caching implementation for neutron_network

Because of issue:

  https://tickets.puppetlabs.com/browse/PUP-3656

in Puppet, exceptions from prefetch do not prevent resources
from being initialized. In the case of neutron, this
can lead to duplicate resource definitions b/c neutron
does not prevent users from creating duplicate objects.

In our test lab, the following is happening:

1. prefetch fails:

Could not prefetch neutron_network provider 'neutron': Execution of '/usr/bin/neutron net-show --format=shell 4d46e084-5d34-471c-ad11-2f9a7aacdee7' returned 1: Unable to establish connection to http://lb.keystone.service.consul:35357/v2.0/tokens

2. resources run anyways

3. since they cannot see the existing resources in the @property_hash
they keep on creating duplicate network entries.

This patch removes the issue by having each call to exists? call
a custom cache method (which is also called by instances). This
ensures that each resource instance will fail if the caching of
information fails. It also ensures that subsequent resources
rebuild the cache if previous resource instance of a provider
fail.

Change-Id: Iab966ad0d87ba20150d91d1fecd0a90e01b1b770