Device abstract class

Will likely be used in future for a device interface