(bug 4062) Initial OAuth implementation

This currently does not allow anyone to use OAuth to auth anywhere
but allows the OAuth token process to work.
(bug 4062) Fix protocol version related code
(bug 4062) Fix various concerns
(bug 4062) Refactor code to remove indent
(bug 4062) Missed explicit protocol_version
(Bug 5323) Disable parsing of external entities in synsuck and the importer

* creates the DW::XML::RSS/DW::XML::Parser modules to replace their
  XML::* equivalents. Works basically the same, just with a tighter
  configuration
Move Tabula-Rasa based layers into their own s2layers.dat

For clarity, and to make it easy to get a list of which layers are based
on Tabula Rasa and which ones have their own highly individual styling
Merge pull request #721 from afuna/group-tr-styles

Move Tabula-Rasa based layers into their own s2layers.dat
Add "pop" support to S2

This adds a new language keyword: pop. It returns the last item in an
array (like a stack), leaving the array one item shorter.

Usage like:

    var int myitem = pop $myarray;

It can be used anywhere you can use an expression, as you might expect.
Add push function to S2

This adds the push operator to the S2 language, which allows you to push
simple values onto arrays of the same type.

Usage:

    var int[] iarray
    push $iarray, 5

Also works with expressions on the right side, so you can be complicated
there if you really want. This is a statement, so it doesn't return
anything and you can't use it in other statements.
Update push support to allow pushing arrays

This makes the push command allow you to push an array onto an array,
which basically appends the items from the array onto the first array.
Merge pull request #504 from zorkian/s2-poppush

S2 pop/push language extension

For #726
Avoid "excessive recursion" error in S2

* Uses push/pop and iteration instead of recursion

* Works for all official core2 layouts, site styled comment pages.
  Should also work for custom core2 layouts which haven't overridden
  EntryPage::print_comments

* Updated core1.s2 reference implementation -- but there's nothing we
  can do for the custom layouts here because most custom core1 layouts
  reimplement this method

* Also prevents recursion error in comment count calculation for the
  page summary module

Fixes #726.
Stop nesting the .comment-thread divs when too deep

Browsers will stop applying visual styles to elements that are very
deeply nested. Our .comment-thread class wraps around each comment +
its replies (instead of each comment), but unfortunately, browsers
aren't very happy with that on long nested threads, and things look
broken.

(In firefox, links lose styling and everything becomes a pile of text at
the bottom. In chrome, the comments are spaced apart, but lose
indentation).

So since we know approximately when this happens, let's stop nesting
before we reach that point. Early in the thread, .comment-thread will
wrap around the comment and its replies. At 180 replies in,
.comment-thread will act like the .comment-wrapper (avoiding further
nesting)

For #726.
Merge pull request #727 from afuna/apply-pop-push-bug-726

Handle deeply-nested comment threads
Cleanup whitespace
Cleanup whitespace take 2
Always use LJ::challenge_check_login
Merge branch '_always-use-challenge_check_login' into release-1.20

* _always-use-challenge_check_login:
  Always use LJ::challenge_check_login
Merge branch '_xml-entity-sec-bug5323' into release-1.20

* _xml-entity-sec-bug5323:
  (Bug 5323) Disable parsing of external entities in synsuck and the importer