use a mix of Errno and syscall.Errno

I was really confused initially when I was seeing "Resource Busy" errors and my tests for `err == syscall.EBUSY` were failing. Everything getting wrapped in the Errno type means that the correct check would be `err == mdb.Errno(syscall.EBUSY)`, which is unintuitive and cumbersome.

I changed error handling so standard errno values are of type syscall.Errno, lmdb errno values are of type mdb.Errno. I also documented how errors are handled and wrote some tests.