Refactor Device constructor, and correctly implement destructor and IDisposable