make data a property

properties are things you can change about a type, like it's current value, and
they need a provider around to actually do it

This default provider currently doesn't do anything apart from declare the
boilerplate methods, but it does allow this to happen:

    $ puppet apply --modulepath spec/fixtures/modules -e 'include demo1'
    Notice: demo1
    Notice: /Stage[main]/Demo1/Notify[demo1]/message: defined 'message' as 'demo1'
    Notice: /Stage[main]/Demo1/Datacat_fragment[data bar => 2]/data: defined 'data' as '{"bar"=>"2"}'
    Notice: /Stage[main]/Demo1/Datacat_fragment[data foo => 1]/data: defined 'data' as '{"foo"=>"1"}'
    Notice: Finished catalog run in 0.04 seconds
autorequire the datacat_fragment

We want the datacat_fragments to gather data and update the datacat object
before the datacat flushes, so autorequire mased on Datacat_fragment.target ==
Datacat.path
hack it till it collects

This is wrong in that it seems to actually be declaring @@data in Object, where
we really want it in the datacat type or provider class, so you get a lot of:

    /Users/richardc/puppet-datacat/spec/fixtures/modules/datacat/lib/puppet/type/datacat.rb:16: warning: class variable access from toplevel

It does at least merge the data together enough that the datacat providers
flush method can see it:

    Debug: Datacat[/tmp/demo1](provider=datacat): Collected {"bar"=>"2", "foo"=>"1"}

A fix is probably along the lines of a shared utilty class the two types can
treat as their staging area for assembling the data.