Merge pull request #25 from dimagi/mwhite

let selenium wrapper wrap an individual element
add utils for writing json to excel; add doctest
Merge pull request #26 from dimagi/download-users

add utils for writing json to excel; add doctest
make memoized cache on the instance rather than on the class when dealing with methods, to fix a pervasive memory leak
Merge pull request #27 from dimagi/memoized-leak

make memoized cache on the instance rather than on the class when dealin...
add LockableMixIn (stolen from corehq reminders)
Merge pull request #28 from dimagi/lockable

add LockableMixIn (stolen from corehq reminders)
fail hard if someone tries to loop through a WorksheetJSONReader twice
Merge pull request #29 from dimagi/fail-hard

fail hard if someone tries to loop through a WorksheetJSONReader twice
sort headers using alphanumerical sort rather than lexical sort
Merge pull request #30 from dimagi/sort-download

sort headers using alphanumerical sort rather than lexical sort
improve memoize so it can take any argument structure
small optimization
refactor memoized and add test
Merge pull request #31 from dimagi/improve-memoized

improve memoize so it can take any argument structure
fixed memoized changes for python 2.6
Merge pull request #32 from dimagi/memoized-2.6

fixed memoized changes for python 2.6
fix last py 2.6 fix
Merge pull request #33 from dimagi/memoized-2.6

fix last py 2.6 fix
fix 2.6 for realz