cleanup and re-arrange some imports to be more readable
implement BC specific (factory) helpers using BC APIs "directly"

we're trying to avoid registering the java.security provider since it's problematic in environments with multiple runtimes started

+ start implementing our own [security].getInstance factory methods
start using our factory methods instead of the java.security stuff directly
replace Signature.getInstance usage with a BC first than rest of providers one
cleanup PKeyDSA to use our own factories - added `getKeyPairGenerator`
setup our own getMac factory and use it + some minor HMAC cleanup
- mostly do not catch and hide argument to_s conversion errors raised
building strings ( the Java "way" :)
deprecate doWithBCProvider and avoid it in code base (NetscapeSPKI)
generixize getWithBCProvider's Callable lambda interface
NetscapeSPKI now loadable even without the BC API (fails on invocation)
introducing our own NetscapeCertRequest with the get "BC" provider avoided
cleanup Ruby Cipher impl - use our getCipher factory instead of the Java one
finally, we seem to be able to deprecate getWithBCProvider - not used at all
setup tests for our factories and tune them out + initialize BC when ext loads
unfinalize constants (for tests) and only call BC-factories if provider != null
Cipher.getInstance gets tricky due JCE internals - but seems fine the API way
it depends on which provider's classes are loaded with the SunJCE's one it won't work since the internal `JceSecurityManager.INSTANCE.isCallerTrusted()` fails
- but Sun's getCipher(transformation, provider) works without any assumptions being made for the provider to be registered among the Security providers ...