By making lim/2 handle soem more limit_exceeded cases we can simplify everything else. Also only invoke tuple_size/1 once per tuple.