1) Use Arduino 1.6.5: 1.6.6 is known to have issues, 1.6.7 may work (seems to work for me...) but is not yet officially supported. (I got it working under 1.6.5 and the just tried 1.6.7 without making any changes and had no issues... but 1.6.5 is the recommended version across the board)
2) Install ESP8266 board support version 2.0.0 through board manager. Plenty of places show how to do this, dead simple, just add the URL in the preferences dialog then go to board manager, search, install.
3) Install and configure esptool.py per phrend's 3rd post at viewtopic.php?f=26&t=6845. I used his tools.esptool.upload.pattern rather than the one on the esptool.py page, it appears he trimmed off some extra fields, I don't know if this fixes a typo with the original or what, but it worked for me. Another important note, make sure you're using the FULL path to the esptool.py, it doesn't might not like shortcuts such as ~. Be explicit.
4) Connect it correctly. I am using an ESP-12E, your particular board may be different. If you have doubts about your connections then resolve that first. I am connecting through an arduino uno as my USB/Serial adapter and using a bread board to simplify the connections with the following layout:
ESP Pins: GND and GPIO15 to GND on the UNO
ESP Pins: RX and TX to RX and TX on the Uno. These might need to be reversed depending on how your USB/Serial adapter works/is labeled. If you can't get stuff in your Serial monitor then you don't have it set right, or something else isn't connected right.
ESP Pins: VCC and EN (CH_PD on most boards I believe, but labeled EN on mine) to UNO 3.3v (I believe it works on 5v as well, some sources say it's 5v tolerant, others say not... a critical thing is your power source must have enough amperage, a lot of serial programmers, and other 3.3v sources aren't strong enough but the uno seems to work for me... power is a big problem people bring up a lot, so make sure it's solid. I know the 3.3v pin on a teensy doesn't have enough oomph to make it happy...)
ESP Pins: GPIO0 and RST floating with wires (this is the weird part, you will have to move both of them around to upload and run so make sure you have some way of moving them between GND and 3.3v...)
5) Select and configure board in the tools menu. I'm just using the default stuff for a generic board so far for mine and it seems to work. No idea what many of the configurations do yet, so can't advise there.
6) Get ready and program. Make sure the serial monitor window is closed, it won't work with it open since it needs to take over the serial port with the external esptool.py and so forth. Connect GPIO0 to GND. Hit upload and watch the status text just above the output at the bottom. As soon as it changes from "Compling" to "Uploading" briefly connect RST to GND (just tap it) to reset the ESP8266 and put it into programming mode (thanks to GPIO0 being connected to GND). Don't touch anything and hold your breath, you should see programming progress scroll by (on 1.6.7 it doesn't appear to follow the progress so you have to manually scroll, it doesn't have this issue with 1.6.5, but it's non critical).
7) Reset and test. Disconnect GPIO0 from GND and connect it to 3.3v to put it into normal operational mode. Open your serial monitor if you like. Pulse RST to GND again to reset and you should be executing your code.
Important Notes:
The really critical things were: You can't boot directly into flash mode, it has to be powered on and then reset into flash mode. This is not true 100% of the time, but it is FAR more reliable to reset it into flash. I have to reset (or boot when I'm lucky) AFTER the programming starts trying to upload. If I boot in before then it almost never connects... but again this isn't 100% of the time. Since you have to pulse reset low as well as switch GPIO0 from GND to 3.3v regularly to reprogram and test I found it by far easier to just leave them as loose wires I can stuff wherever than to formally say they belong in any given place. I may make a little dev board with a program/execute switch and a reset button to make life easier in the future, but a breadboard and some floating wires works well enough for now. GPIO2 is *supposed* to be high but I found no difference between high and just not connected so in the interest of having fewer wires in the way I just ignored it, as with everything here YMMV.
Hopefully this helps someone else get things running. I think the issue is just buggy software (arduino) on top of buggy software (ESP8266 board manager) on top of buggy software (esptool.py, which replaces broken software of esptool) all on a platform that gets less direct focus (Mac vs Windows, just fewer users) and all running on boards that come in a zillion configurations, it's not surprising that things are going to work less than perfectly.
My first serial testing example I uploaded worked well for quite a while, re-uploaded it and it worked for a while then crashed, so there may be some other stability problems, so I would again urge using Arduino 1.6.5 since it's more tested than 1.6.7 but the boards could be iffy, the compiler could be iffy, my programming could be iffy, the programmer, the individual upload, my configuration, etc. etc. etc. Problem for another day.