Add more classes to Instance inheritance hierarchy

Instance class is too generic and contains some dirty workarounds to differently handle
Windows and Linux images, different ways to bootstrap the instance etc.

It is suggested to add more classes to build a better hierarchy:

Base Instance class becomes abstract and agnostic of the desired OS and agent type
It is inherited by two classes: LinuxInstance and WindowsInstance
LinuxInstance adds a default security rule for Linux, opening a standard SSH port
WindowsInstance adds a default security rule for Windows, opening an RDP port
At the same time WindowsInstance prepares a user-data allowing to use Murano v1 agent

LinuxInstance is inherited by two other classes, having different software config method
LinuxMuranoInstance adds a user-data preparation to configure Murano v2 agent
LinuxUDInstance adds a custom user-data field, allowing the services to supply their own
user data

Change-Id: I7394a10d1940c0cb746df6db9d326375dc5e7ccb
Merge "Add more classes to Instance inheritance hierarchy"