Adds tag expressions and improves chain evaluation order

This parses tag expressions and improves the evaluation of tag expressions, mainly taking advantage of ActiveRecord's built-in chaining functionality. However, AR's default chaining produces unexpected results in some cases, namely when you have an expression like "java&fun+ruby", if both Ruby and Java are tagged with "fun," it will not return the expected [ruby, java] because AR will chain together the unions with AND instead of OR when there is an intersection between the unions. The parser also allows for operators within tags by using a backslash, e.g. "c\\+\\+&java"
usage: Item.tagged_with("java&fun+ruby", :expression => true)