Implement device abstraction for remaining classes

There are more classes left to abstract to continue the work started by @kloudkl in #415.  Here's a PR in which to do that work.  I'll note when the PR is ready for review/merge.

I'm not sure if there will be more PRs into this branch after this, but we can take that as it comes.