Q:

Find Id's with start/end date range coverage caps greater than 20 days

I need to find all Id's that have 20 or more days outside of date ranges, between the first StartDate and last EndDate.
One Id has multiple start dates and end dates. In the following example, Id 1 has two gaps less than 20 days each. It should be considered as one range from 10/01/2012 to 10/30/2014 without any gap. 
1   10/01/2012  02/01/2013
1   01/01/2013  01/31/2013
1   02/10/2013  03/31/2013
1   04/15/2013  10/30/2014

Id 2 has a gap more than 20 days between end date 01/30/2013 and start date 05/01/2013, therefore it has to be captured by the query.
2   01/01/2013  01/30/2013
2   05/01/2013  06/30/2014
2   07/01/2013  02/01/2014

Id 3 should be considered as one range from 01/01/2012 to 06/01/2014 without any gap. The gap  between end date 02/28/2013 and start date 07/01/2013 should be ignored because range from 01/01/2012 to 01/01/2014 covers the gap.
3   01/01/2012  01/01/2014
3   01/01/2013  02/28/2013
3   07/01/2013  06/01/2014

A cursor can do it but it works extremely slow and is not acceptable.
SQL fiddle: http://sqlfiddle.com/#!3/27e3f/2/0

A:

With your fiddle schema, try this:
;WITH naivegaps AS
(
  SELECT ROW_NUMBER() OVER (ORDER BY id, startdate, MAX(dr1.enddate)) AS rn,
    dr1.Id, dr1.startdate, MAX(dr1.enddate) as enddate    
  FROM dateranges dr1
  GROUP BY dr1.Id, dr1.startdate
)
SELECT n1.id, n1.enddate as gap_start, n2.startdate AS gap_end, 
  datediff(dd, n1.enddate, n2.startdate) as gap_width, n3.*
FROM naivegaps n1
  CROSS APPLY
  (
    SELECT TOP 1 nx.id, nx.startdate
    FROM naivegaps nx
    WHERE n1.id = nx.id AND nx.rn > n1.rn
    ORDER BY nx.startdate
  ) n2
  OUTER APPLY
  (
    SELECT TOP 1 nx.id, nx.enddate
    FROM naivegaps nx
    WHERE n1.id = nx.id AND nx.rn < n1.rn
    ORDER BY nx.enddate DESC
  ) n3
WHERE datediff(dd, n1.enddate, n2.startdate) >= 20 AND (n3.enddate <= n1.enddate OR n3.enddate IS NULL)

The CTE at the top orders everything appropriately for the following checks, and adds a row number to facilitate ordering checks.  The CROSS APPLY finds all gaps between the end of a sequence and the following beginning.  The OUTER APPLY checks for ranges that completely surround the gap in question (that wouldn't have been sorted appropriately in the CROSS APPLY)
EDIT:  I compared the execution plan of this solution against the recursive CTE solution provided by Joe Farrell.  They're significantly different plans, but the estimated efficiency is very close (mine is slightly better, about 4%).  This may or may not translate to real-world performance on a large data set; I encourage you to test both approaches and use the one that works best in your scenario.

