Use rspec3 compatible cli options
Lock rspec version to 3.x, add collection matchers
Switch all `be_BOOL` to `be BOOL`
Define #has_key? for plugins

This is consistent with Hash-esque access we allow for plugins, and is
depended on by tests. In addition, it avoids a pitfall where calling
`some_plugin.has_key?("foo")` would add an attribute named `:has_key?`
with a value of `"foo"`.
Fix/clarify expectations on network plugins

When first implemented, this test was succeeding only accidentally. A
demonstration of the problem is included below.

A change in the implementation of the `have_key` matcher in RSpec3 exposed the
error, which revealed contradictory intent in the tests. To fix the
error, we relax the specifiction to only assert that the plugin did not
fail when it should not also expect address attributes to be populated.

```ruby
    require 'pp'

    class Demo

      attr_reader :data

      def initialize
        @data = {}
      end

      def method_missing(name, *args)
        return @data[name] if args.length == 0
        @data[name] = Array(*args)
      end

    end

    describe "when have_key isn't defined and we use method_missing in dangerous ways" do

      it "does wut m8?" do
        o = Demo.new

        # This should actually raise because Demo doesn't have any method
        # resembling #has_key?
        o.should have_key("foo")

        # But it actually succeeds because of the magical method missing
        # hash-set behavior :(
        o.data.should == {}

        ## Result:
        # expected: {}
        # got: {:has_key?=>["foo"]} (using ==)
      end

    end
```
Configure rspec to allow 'should' syntax for mocks+expectations
Merge branch 'rspec3-ci-fail-fix'