Uni-Prover: A Universal Automated Prover For Specificationally Rich Languages