Handle zypper exit code

The exit code from zypper tells us useful bits. For instance, we can
know that the zypper command needs to be run again (after the zypp stack
got updated, for instance), or that a reboot is required (which we do
for now).

Also do all this in a ruby_block to have more control on what's
happening.
Save one_shot_run attribute early in the recipe

This is safer, especially if there's a reboot.
Only ignore nodes that are in discovering/discovered states

Nodes could be applying, readying, or even installing: we'd still want
to include these nodes by default.
Fix crash on initial apply
Add do_reboot attribute to decide if node will be rebooted or not
Make gpg_checks a required attribute
Rename javascript method
Make do_reboot select disabled when there won't be any reboot
Make it possible to reboot on later runs
Fix javascript to enable/disable do_reboot
Only reboot if there was no boot since we marked the need to reboot
Remove javascript related to do_reboot

Now that we can allow rebooting at a second stage, after an earlier
zypper call, this option should stay independent.
Add option to pass --auto-agree-with-licenses to zypper
Fix raising exception when zypper command fails
Fail if we get ZYPPER_EXIT_INF_RESTART_NEEDED too often

We were succeeding, which is probably not what we want.
Merge pull request #1 from vuntz/improvements

Tested everything except reboot, LGTM