Rewrite to use classes instead of DUs

The advantage is covariance. Need to rewrite type constraints later.
First version of Function

Need revising on concrete syntax
Remove dll suffix

dll and exe suffices are always assumed.