Improve the way we declare and use (optional) collector fields

Entity and Monitor objects were updated to work with optional
fields better. Both were also updated to throw an error when
an access to non-declared field is attempted.

It is now also possible to specify default value for field
in Entity.Stat to make the optional fields more usable
in the policy.

Guest Memory collector field declaration was changed to explicitly
state the collected fields. This should reduce the confusion in
what fields are supposed to be collected in libvirt vs. in vdsm
environment. It is my opinion that the field declaration is
part of the collector's metadata and should be explicitly
specified rather than inferred.

New Guest Memory collector (GuestMemoryOptional) that treats all
fields as optional is added as an example. It also helps when
a policy should support more than ballooning and is supposed
to work (with ballooning ignored) even when no guest agent is
available and internal memory stats are missing.

This should keep us compatible with vdsm who has GuestMemory in
mom.conf and give us the option to use the new collector with
updated ballooning policy in the future vdsm releases.

Change-Id: I631056568b5a69e18f6ed02730c41ab59f460aad
Signed-off-by: Roy Golan <rgolan@redhat.com>
Signed-off-by: Martin Sivak <msivak@redhat.com>
Reviewed-on: http://gerrit.ovirt.org/34528
Reviewed-by: Adam Litke <alitke@redhat.com>