* tasks/common/boot_local.erb: do not fail if node facts are nil

The boot_local code implicitly assumed that node.facts is never nil; this
change makes boot_local work even for nil facts
Make sure that checkin does not try to bind a node that is installed

We used to solely consider during checkin whether a node had a policy
assigned to it to determine whether we should try and bind a node to a new
policy. That was wrong, as it is possible to have nodes that are installed
but have no policy. To protect against inadvertant data loss in the case
such a node goes through checkin, we now make sure that nodes that either
have a policy assigned or are marked as installed are never bound to a new
policy.

Issue: https://tickets.puppetlabs.com/browse/RAZOR-263
When 'protect_new_nodes' is true, make sure we boot new nodes into the MK

Even when protect_new_nodes is true we should run new nodes through the
microkernel once so we have facts for them. After that, we will boot such
nodes locally.

This change also adds a lot of (but not enough) tests around the
functionality connected to booting and checkin of nodes in various
combinations of bound/installed/registered.

Issue: https://tickets.puppetlabs.com/browse/RAZOR-264
* tasks/common/boot_local.erb: fix syntax error

Syntax error was introduced in b0e82dfd
Standardizing spec tests

Since the `to_s` has been fixed for Razor::Command, the standard for spec tests should be `describe Razor::Command::$command_name do...`. This removes a redundancy too in `it_behaves_like "a command"`.

Fixes https://tickets.puppetlabs.com/browse/RAZOR-240
Handle cases where command's attribute has no datatype

Fixes https://tickets.puppetlabs.com/browse/RAZOR-268