this should address the failure in #2732

i am still very concerned that I can't test this on windows - I'm not used to developing for windows, so not sure that these links will work even if the test passes on windows.

is there a good AWS AMI to use for windows testing? i can run this in my own AWS account.
utils.localinterfaces: Uniquify LOCAL_IPS

On my Python 3.2.3 system, I get:

  >>> socket.gethostbyname_ex('localhost')
  ('localhost', [], ['127.0.0.1', '127.0.0.1'])

After de-duplicating, LOCAL_IPS[1] (if it exists) will be a non-local
IP address that might be useful to a remote host (it might also be
'0.0.0.0', but I'll worry about that later).
utils.data: Use list comprehension for uniq_stable()

This should be faster than and explicit for loop.  Also, a set makes
more sense than a dict if we only care about values.  After these
changes, the resulting code is the same as Dave Kirby's uniqify()
suggestion on Peter Bengtsson's blog [1].

[1]: http://www.peterbe.com/plog/uniqifiers-benchmark
utils.localinterfaces: Add PUBLIC_IPS to consolidate socket logic

Consolidating IP detection in this module will let us remove
socket.gethostbyname_ex calls from other modules and ensure that
everyone agrees on what our public IPs should be.
parallel.apps.ipcontrollerapp: Use utils.localinterfaces

... for LOCALHOST and PUBLIC_IPS, rather than duplicating the socket
incantation and hard-coding 127.0.0.1.
frontend.html.notebook: Use utils.localinterfaces.LOCALHOST
parallel.util: Use utils.localinterfaces

... for LOCALHOST and PUBLIC_IPS.
parallel: Use utils.localinterfaces.LOCALHOST
Merge pull request #2849 from wking/uniq_stable-comprehension

utils/data: Use list comprehension for uniq_stable()

This should be faster than and explicit for loop.  Also, a set makes more
sense than a dict if we only care about values.  After these changes, the
resulting code is the same as Dave Kirby's uniqify() suggestion on Peter
Bengtsson's blog [1].

[1]: http://www.peterbe.com/plog/uniqifiers-benchmark
updated based on comment from @takluyver
Merge pull request #2844 from gregcaporaso/issue-2732

this should address the failure in #2732
Correct docstring of ipython.py

The script installed by setup.py is auto-generated by distutils.

Fixes #2858.
setuptools has console_scripts, not distutils
Merge pull request #2831 from minrk/qtversions

avoid string version comparisons in external.qt
Merge pull request #2859 from asmeurer/installed_script

Correct docstring of ipython.py

had archaic reference to script location.

closes #2858
Merge pull request #2850 from wking/localinterfaces-localhost

Consolidate host IP detection in utils.localinterfaces

This PR replaces a number of hard-coded 127.0.0.1 references with
LOCALHOST, and consolidates the computation of LOCALHOST,
LOCAL_IPS, and a new PUBLIC_IPS in the localinterfaces module.

It's unclear to me when LOCALHOST would not be 127.0.0.1. I suppose
you could have another IP in the 127.0.0.0/8 block, or a IPv6 address.
It may also be possible to not have a loopback interface at all. In
that case it's possible that we need a LOOPBACK variable in
utils.localinterfaces which is a valid loopback interface or None, so
that consumers can differentiate between generic IPs pointing back to
the local host and the loopback interface.
declare data attr in MockSocket

setting attrs not declared at the class level will be illegal in pyzmq ≥ 3
bump minimum pyzmq version to 2.1.11

and remove the associated workarounds for old pyzmq