Here is a base R solution. The fill function invokes ave using na.omit(x)[1] as in Richie Cotton's solution.
fill <- function(...) ave(..., FUN = function(x) na.omit(x)[1])
transform(df, birthplace = fill(birthplace, name), age = fill(age, name))
Note: This also works with na.locf. Replace fill with:
library(zoo)
fill <- function(...) ave(..., FUN = function(x) na.locf(x, na.rm = FALSE))