Fixes #4242: change implementation of cnode configuration + immutable implementation

Today, Node Configurations are only used to find if a node configuration changed since the last promise generation time, so that we know if we do actually have to write new promises. They used to be used for many other things, long time ago deprecated and replaced (change request, etc). 

So we can't completely remove node configuration, but we have the possibility to dramatically simplify the way they are stored in LDAP. Actually, we only need to store a fingerprint of the node configuration, so that we can know if the new configuration has the same fingerprint. 

So, in place of a lot of entries for node configuration, under the ou=Node Configurations, we will only have one entry (cn=Node Configurations) with lots of nodeConf values. 

Major implementation changes are:

- everything related to node configuration is modelized in immutable objects now. In particular, dramatically simplify NodeConfiguration (a unique, simple case class)
- remove several variation of node configuration. NodeConfiguration is now the main one
- change the LDAP persistence logic to match what is needed now,
- dramatically improve log reporting during promise generation, so that other people than RudderWeb core dev can actually find something usefull in debug mode, and not spamming thousand of lines of logs

For version of Rudder with that change, I think we should add a migration script that detect if "ou=Node Configurations" exists and delete it (not done here).