I've played with systemd-networkd a bit. It seems capable enough to handle this use case, but it has some significant drawbacks. It's not very backward compatible with expected sysadmin patterns. That is, as a sysadmin, I'd expect ifup and ifdown to work. I expect to be able to do things like ifdown eth0&&ifup eth0 to bounce the network on an instance. And with systemd-networkd, that doesn't work. Also, since it uses a different DHCP implementation, you end up with an entirenly different set of ways of configuring dhcp client options and dhcp scripts. So, while it works, it's a big change--probably too big to introduce for stretch images.
I'll also caution against systemd-resolved. I have had very bad success with the legacy DNS proxy included in systemd-resolved. Networkmanager does play less destructively with /etc/network/interfaces than systemd-networkd, although that only means they play well on the same system. But only one of them manages a given interface. I've chosen to use networkmanager on several of my cloud images, but I'm not sure it is playing great with cloudinit.