Closes #37. Closes #29. Closes #27. Closes #26. Closes #19. Closes #14. Closes #8. Closes #5. Closes #2.