{{#each todos}} rendering was broken when no list was selected, since {{#each}} cannot iterate on "{}" (it only takes lists and falsey values).
This code path is never hit in the todos app as it is shipped, but it can cause problems with people modifying the example code for their own apps.
Some failing tests, which are hopefully mostly just tests of the modified code that need to be ported.
The main work was replacing the use of pseudo-attributes $special and $dynamic with the new HTML.Attrs(...) / array representation. Some functions were also rewritten to use Visitors (`toJS`, old `toHTML`/`toText`/`evaluateAttributes`, `replaceSpecials` in the compiler, but not `optimize` yet or `materialize`).
Create the "blaze-tools" package to hold toJS and other functions that are useful for template parsers/compilers that need to read or generate JS.
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
Adds `Accounts.validateLoginAttempt`, `Accounts.onLogin`, and
`Accounts.onLoginFailure`.
The process for logging in a user is consolidated in accounts-base,
which is now the only package which directly accesses login tokens in
the database.
All login methods now go through `Accounts._loginMethod`, which
ensures that exceptions are captured and login hooks are called in all
cases.
The callback hook implementation code from livedata is extracted into
an internal `callback-hook` package, where it can be used by accounts.
This is less efficient, as we don't actually need to compute it every time.
However, I think this is pretty small compared to the other work we're doing
(string splitting via regexp, string copies, etc).
This makes the code clearer and easier to understand, as all the code is in
one place. Also, it was distracting at the top of the file as it came before
the commit saying what was in the file.