Heavy rework. Promises now derive from the IPromise interfaces and use IFuture objects internally that do the concurrent work. Removed the AndThen methods because they were not satisfactory. Added the JetBrains Resharper annotations and added those in where applicable. The static methods to create Promises now can be found in the static Promises class. The Async methods in the Do class and all promise creating methods take an optional ApartmentState parameter that describes in which apartment state the future thread will run.