Design, implementation and evaluation of a practical pseudoknot folding algorithm based on thermodynamics