Replace recursive_merge! with Chef's deep_merge!

recursive_merge! had a number of serious issues, worst of which was
that it did not recurse.

An exclamation mark was missing in the recursive call.  However the
interpreter never even reached this typo in order to result in a
NoMethodError, because the block passed to merge! was never used - b
is always a Mash and unlike Ruby's Hash, Chef's Mash ignores any block
passed to merge!  So in fact no recursion ever took place.

Other issues:

    if _old.class.kind_of? Hash.class

should have read

    if _old.kind_of? Hash

There should have also been a test when recursing that _new was a kind
of Hash.

In the case where _new was nil, it should not have overridden the
existing value.

https://bugzilla.novell.com/show_bug.cgi?id=775654

(cherry picked from commit 385467bb694ef1548cfb2213a4da58b14700912a)
Add support for updating array-typed JSON data in edit_attributes views.

No need to switch to "Raw" editing method any more.
(cherry picked from commit 032956d3d4c4d9b4ffc0f5f6f5ec41650d6889ad)
Add support for float values in update_value() helper

This is needed to add support editing scheduler attributes
(cpu_allocation_ratio/ram_allocation_ratio) in the nova barclamp.
See e.g.:
https://github.com/SUSE-Cloud/barclamp-nova/commit/03623e9fbbd656509480c1a36e322c5d8ffce595

Signed-off-by: Vincent Untz <vuntz@suse.com>
(cherry picked from commit ca51b3996029ac96a6258a256cc373bfaffb8d6e)
Do not fail when new options lead to new subpaths in JSON

When a new option like scheduler/cpu_allocation_ratio is updated for an
old proposal, the JSON doesn't have the scheduler subpath, and it needs
to be created.
Merge pull request #515 from rhafer/release/pebbles/master

https://github.com/crowbar/barclamp-crowbar/pull/515

Merged by devtool for cloudsleuth