Recommendations on launching applications and setting up workspace based on location? When moving between locations (work, home, coffeeshops...) I find that I have to manually set up things how I like them over an over. Is there an application that will automatically launch and position my applications when I am at a specific location, or select a preset "workspace"?

Stay, and ControlPlane seem to scratch the surface of what I want but are BOTH out of date. Launching apps and positioning windows on particular desktops in a specific monitor configuration is priority.
For this problem, I use https://github.com/jigish/slate, as this allows to position windows based on the current monitor configuration which is currently attached. The monitor configuration can be recognised by the resolutions of the the screens. A simple example with configurations for "laptop+external monitor" and "laptop only": 

# Configs
config defaultToCurrentScreen true
config menuBarIconHidden true
config checkDefaultsOnLoad true

# Monitor Aliases
alias mon-extern 1920x1080
alias mon-laptop 1280x800

# Concrete positions
alias 0-mail        move screenOriginX;screenOriginY       screenSizeX;screenSizeY          ${mon-extern}
alias 1-mail        move screenOriginX+0.17*screenSizeX;screenOriginY       0.83*screenSizeX;screenSizeY         ${mon-laptop}

# layouts
layout 2monitor 'Calendar':REPEAT              ${1-mail}
layout 1monitor 'Calendar':REPEAT               ${0-mail}

# Default Layouts
default 2monitor resolutions:${mon-laptop};${mon-extern};
default 1monitor  resolutions:${mon-laptop}


This will move the window of mail from full screen to part of the screen. But see the documentation of the program for more features and examples.