Add support for local aggregate "uploads".

Instead of using a script and generating a fixed URL, providing a
local path "uploads" by just saving to the given location and
generating a file:// URL. This enables a space server to fully
generate aggregates when they won't all fit into cache. This won't
enable viewing the models and doesn't work between servers, but does
allow a server that doesn't need aggregates from another server to
generate all their meshes.
Don't catch SIGABRT.

We should only be getting these on assertions, and if we're violating
one it is better to die immediately, potentially getting a good stack
trace in a crash dump, rather than catch the error trying to cleanup
and exit gracefully, leaving no indication of what happened. If at
some point SIGABRT is coming from something else, we can revisit
this.
Fix conflicting retries and redirects in SessionManager.

This was a long standing bug in SessionManager where we would see an
assertion that the seqno should not be 0. It looks like it was caused
only during redirects where the entire login took longer than the
retry timeout. If we got a redirect back, we'd reset the seqno to 0,
but the connectingTo would remain the same until we got the initial
underlying connection to the new space server. If the retry callback
occurred during this time, we'd end up thinking we were still trying
to connect to the original server, but the seqno would be bad,
triggering the assertion. This explains why it only happened rarely --
you had to get redirects and the retry had to happen at just the right
time because if you already had a connection to the redirected space
server it would have been used immediately. The fix is to check both
the server we're trying to connect to and that the seqno hasn't been
reset.
Allow specifying locally saved aggregate mesh URL prefix.

Allow replacing the file:// URL with a customized URL. This allows you
to specify, e.g., a per-node web server URL that can be used to access
the files. This avoids upload but still allows sharing of the
generated meshes.
Fix check for validity of redirect message.

Before processing a redirect message in the SessionManager, we check
to make sure it's actually valid and applies to our current request
since we might end up getting something out of date. However, the
check was assuming that if we had a connection request and the server
being connected to matched, that checking the seqno would be
ok. However, in the case of duplicate redirects, which can happen due
to high latency in the request triggering a retry, we might have reset
the seqno for the redirect step, but still be getting a connection for
that server, making the connectingTo server still the same. In this
case, we need to also check that the seqno is even still valid. Other
places we have similar checks aren't subject to the same issue because
redirects are the only time the connectingTo server and seqno are not
reset simultanously. This is related to the issue fixed in
dc0b5bff4786, i.e. they are both due to redirects only reseting the
seqno immediately but not the connecting server.
Change AggregateManager priorities to only use tree level.

We want the ordering to take into account the number of observers, but
the existing approach doesn't work since it can result in prioritizing
a parent above its child, making it impossible to make progress in
generating aggregates. This patch makes the prioritization depend only
on the level in the tree, but a better solution would address the
issue by prioritizing by observers under the constraint that all
children have to have a higher priority than their parents.
Add replicas to AggregateManager.

Implement LocationServiceListener methods that report replica updates in
AggregateManager, saving the data to the LocationServiceCache. This lets the
AggregateManager generate aggregates built with objects from other servers.
Add waiting stat to AggregateManager.

This is the active number of requests for aggregation currently in the
system. It's simpler than dealing with the different end conditions
requests can end up in.
Merge remote branch 'origin/master' into manual-query
Improve query aggregation for solid angle queries.

Previously we just used the entire server region because it was
conservative. Instead, compute bounds around queriers. This needs to
be done periodically in case queriers are moving. Also, because the
merging algorithm isn't perfect, it's possible we could end up with
worse bounds. In that case, fall back to the bounding region of the
server as we did previously.
AggregateListener fix for libprox and better info from AggregateManager about failures.

Update libprox to get a fix for calls to AggregateListener that became
incorrect when changes to how notifications had to happen for
replication without lifting cuts. Also add better error reporting from
the aggregation method in AggregateManager so we can tell after the
fact why something is failing, especially useful when the item finally
fails for the last time.