ASGARD-1079 - Create simple user data for new AMI types

Made a new plugin interface AdvancedUserDataProvider which takes a LaunchContext instead of a three strings, so that we can add to the functionality again later without replacing the interface so many users have implemented.

The DefaultAdvancedUserDataProvider implementation simply delegates to the original three-string UserDataProvider interface, so existing Asgard admins should not notice a difference.

The new NetflixAdvancedUserDataProvider is open source as an example of the type of logic one can put into an AdvancedUserDataProvider. Netflix's Asgard configuration uses this class, but most companies would not want to use this class for anything other than inspiration.

Also paid down some technical debt in other commits.