gossl/rand: cleanup and tests
sslerr: restructure a little for testing
cleanup, and use the new sslerr.Error()
sha256: cleanup and have errors, not panic()
sslerr: most robust setup for error printing
aes: cleanup, robustness, and upstream alignment

* a little cleanup to have the API mimic upstream crypto/aes
* adding error handling to be more informative and cover edgecases
* including the upstream tests (relevant pieces)
* including a gocompat build tag, to mimic behaviour of go crypto/aes