Topic/plat 6691

PLAT-6691 - Enable optional property placeholders

Creates a form for property placeholders i.e. ${foo.bar} such that they can be specified as optional so a user is not forced to provide them when they don't care about them. By specifying as ${foo.bar?} the base component factory management code will not complain if the property is not present (though the component factory may still check for its presence).

Additional tests added to check it works correctly for properties embedded within strings and within other properties.