Dart language support

This is a rebase of #426