Practical Methods for Proving Termination of General Logic Programs