Add a lock on a file to prevent two processes running at the same time.

Take a lock on a file, fail if another process is already locking.

Prevents two jobs of `brigade` to overlaps (if a cron job is not finished yet). This can't occur right now because the http monitoring handler anecdotally served as a hacky lock by binding a socket =3.

r: @camilo
`file.Fd()` returns a `uintptr`, which the spec says is a wide enough integer to hold any pointer, while `int` is signed and at least 32bits. So unless the fd is > 2^31 (change sign), the value will be correct. I don't think we'll get fd's larger than that.