Simple algebraic evaluator that doesn't use built-in eval(). Uses Shunting-Yard algorithm.