Add a TimestampProblem class to solve the timestamp estimation problem

The timestamp estimation problem is actually really close to a
MPC.  It can be phrased to have a nice piecewise quadratic cost,
linear constraints, and solves well with similar solvers.  The cost
function chosen is to penalize the squared difference between the
measured and filtered offset, and the difference in the corresponding
times.

The solver chosen in NLOPT, NLOPT_LD_SLSQP, is designed for exactly this
problem type, and uses the gradient to produce a really accurate answer.
Multiple solutions attempted are accurate to full double precision with
gmp.

The next step is to replace the current timestamp estimation algorithm
with this new algorithm.

Change-Id: I7939a97cb845b17ea1fafdf6a09d380cb2cc6d8d
diff --git a/WORKSPACE b/WORKSPACE
index aabd057..acf815f 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -157,6 +157,16 @@
     url = "https://www.frc971.org/Build-Dependencies/clang_6p0.tar.gz",
 )
 
+http_archive(
+    name = "com_github_stevengj_nlopt",
+    build_file = "@//debian:nlopt.BUILD",
+    patch_args = ["-p1"],
+    patches = ["//debian:nlopt.patch"],
+    sha256 = "2d65815b21c30813499fe19c63947f7da56b10c0d4a459dce05417899b43e461",
+    strip_prefix = "nlopt-496be736b8b249273838b891f4c8ca3669551127",
+    url = "https://www.frc971.org/Build-Dependencies/nlopt-496be736b8b249273838b891f4c8ca3669551127.zip",
+)
+
 local_repository(
     name = "com_google_absl",
     path = "third_party/abseil",