Device rewrite

Rewrote the Device class and derivatives to more encapsulated code. It's now some framework agnostic mini-API for CUDA and OpenCL