further performance enhancements to the orddict module

Anthony Ramine pointed out that the orddict changes in commit c745eaa8
still don't behave like the original orddict when tuples other than pairs
are present in the orddict, or if the orddict is an improper
list. Experimentation with the R16B02 orddict shows that if an orddict
contains a pair that fetch/2, find/2, or is_key/2 would match, they will
return a success value even if that pair resides in an orddict containing
non-pairs later in its list or if it's an improper list. For example, the
following are all correct for the R16B02 orddict:

true = orddict:is_key(1,[{1,2},{2,3,4}]),
true = orddict:is_key(1,[{1,2}|2]),
2 = orddict:fetch(1,[{1,2},{2,3,4}]),
2 = orddict:fetch(1,[{1,2}|2]),
{ok,2} = orddict:find(1,[{1,2},{2,3,4}]),
{ok,2} = olddict:find(1,[{1,2}|2]).

This means the approach in commit c745eaa8 of traversing the whole orddict
list to verify that it's a proper list containing only pairs is wrong.

This commit takes advantage of this for the fetch/2, find/2, and is_key/2
functions, checking the whole list only for failure cases, thereby being
able to take advantage of list BIFs for the main part of the function, thus
improving timings for success cases. To avoid negatively impacting the
timings of failure cases, a local recursive inlined function is used to
verify that the orddict is a proper list containing only pairs, as
measurements show this approach to be faster the previous approach of using
lists:foreach/2.

The table below shows the performance of these functions compared to the
original versions running on a Macbook Pro with a 2.7GHz Intel Core i7
processor and 16GB of RAM running OS X 10.8.5. The two numbers on each line
are timings in microseconds for the original orddict and the modified
orddict respectively.

fetch length 1: 1.96 1.97
fetch length 10: 2.41 2.01
fetch length 100: 6.03 2.40
fetch length 1000: 28.10 3.59
find length 1: 0.18 0.14
find length 10: 0.79 0.69
find length 100: 6.22 3.93
find length 1000: 39.82 14.04
from_list length 1: 0.21 0.04
from_list length 10 ordered: 4.59 2.09
from_list length 10 reverse ordered: 2.12 2.43
from_list length 100 ordered: 273.11 14.02
from_list length 100 reverse ordered: 14.87 12.79
from_list length 1000 ordered: 26393.22 145.61
from_list length 1000 reverse ordered: 137.41 135.60
is_key length 1: 0.14 0.12
is_key length 10: 0.68 0.66
is_key length 100: 6.02 3.70
is_key length 1000: 68.92 17.63

In all but one case the modified orddict functions are noticeably faster
than the originals, sometimes by one or two orders of magnitude. The only
case here where the original is faster is for constructing an orddict from
a list of length 10 arranged in an order optimal for how the original
from_list/1 is implemented, and in that case the modified version is only
slightly slower on average, and on some runs is faster.

For more details on what these tests do, please see the commit message for
8315d024. Also, note that the same validation tests described in that
commit message were successfully applied to this orddict version as well.