Simplify max and min for nats by removing lte
Add assoc, commut, and idemp proofs for min and max
Prevent possibility of unbounded computation in :search

Attack typeclasses in a much more principled manner. Now, even if we didn't
cut off when the score got too great, computation would eventually end.
Additionally, break the matching of types into distinct phases, which
should also help with performance.
add system FFun to base/System
Use a priority queue to improve performance when matching types in :search
Merge pull request #1332 from Heather/system

add system FFun to base/System
Merge pull request #1330 from mrb/simplify_nat_max_min

Simplify max and min for nats by removing lte
Merge pull request #1333 from bmsherman/improvedSearch

Improved performance for :search