OTP in D

First attempt was just in a single function, I reworked it to use a more OO approach and added an interface and a static class method to clean things up.