Added Windows support

Added windows support, created specific exceptions to be thrown, removed
need for user to specify backend, speed enhancements, converted project
to maven, added unit tests.